`

开闭原则的认识

阅读更多
☆ 开闭原则指的是一个软件实体应对对扩展开发,对修改关闭(Software entities should be open for extension, but closed for modification)。这个原则是说在设计一个模块的时候,应对使这个模块可以在不被修改的前提下被扩展,换言之,应对可以不必修改源代码的情况下改变这个模块的行为。
☆ 满足开闭原则的软件系统的优越性:
① 通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性。
② 已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性。

ξ4.2 实现开闭原则的关键
抽象化是解决问题的关键,在面向对象的编程语言里,可以给系统定义出一套相对较为固定的抽象设计,此设计允许无穷无尽的行为在实现层被实现。在语言里,可以给出一个或多个抽象类或者接口,规定出所有的具体类必须提供的方法的特征作为系统设计的抽象层。这个抽象层预见了所有的可扩展性,因此,在任何扩展情况下都不会改变。这就使得系统的抽象不需要修改,从而满足了开闭原则的第二条,对修改关闭。
同时,由于从抽象层导出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的,这就满足了开闭原则的第一条。

☆ 对可变性的封装原则
这是对开闭原则的另外一种描述,它讲的是找到一个系统的可变因素,将之封装起来。该原则意味着两点:
① 一种可变性不应当散落在代码的很多角落,而应当封装到一个对象里面。继承应当被看做是封装变化的方法,而不应该被认为是一种从一般对象生成特殊对象的方法。
② 一种可变性不应当与另外一种可变性混合在一起。这意味着一般的继承层次不会超过两层。

关键知识点:
☆ 开闭原则的概念,软件实体对扩展开发,对修改关闭;
☆ 实现开闭原则的关键,利用接口或抽象类抽象出系统的抽象层,抽象层不变,利用实现层进行扩展;
☆ 对可变性的封装,将可变的元素封装起来,防止改变扩散到整个应用;
☆ 注意控制封装的粒度,不要将两种可变性封装到一起;
☆ 继承是用来封装可变性的,一般的继承层次不要超过两层;
☆ 策略模式是对开闭原则的很好诠释,其他还有工厂模式、建造模式、桥接模式、门面模式、调停者模式、访问者模式和迭代子模式等;
☆ 对“将条件转移语句改写成多态性”的重构行为应当遵循开闭原则,防止多态性污染;
☆ java下的单方法接口通常用来实现函数指针或者委托的功能;
☆ 任何一棵继承树都要以抽象类为根,具体类不是用来继承的,更不要从工具类继承;
☆ 抽象类要拥有尽可能多的共同代码,同时拥有尽可能少的数据。
☆ 当Coad条件全部满足时,才应当考虑使用继承:派生类是基类的一个特殊种类,而不是其的一个角色,也就是说要区分“Has-a”和“Is-a”;永远不会出现需要将派生类换成另外一个类的派生类的情况;派生类具有扩展基类的责任而不是具有置换或注销基类的责任;只有在分类学角度上有意义时,才可以使用继承。
1
0
分享到:
评论

相关推荐

    该怎么使用Java设计模式编程中的OCP开闭原则?.pdf

    然而,通过仔细思考和阅读许多设计模式的文章后,我们终于对开闭原则有了一点认识。其实,我们遵循设计模式前面五大原则,以及使用 23 种设计模式的目的就是遵循开闭原则。 要遵循开闭原则,我们需要对系统进行抽象...

    02-软件设计原则 模式深度解析和案例分析

    设计原则通常包括但不限于单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)以及依赖倒置原则(DIP)等。 - **单一职责原则** (SRP): 指一个模块或类应该只负责一项功能的变化,即一个类或...

    架构设计培训

    开闭原则意味着软件模块应对外部扩展开放,对内部修改关闭,这可以通过接口编程、数据驱动、反射与元数据、解释器等技术来实现。 培训还涉及了编程的驱动因素,如迪米特法则(最少知识原则)和SOLID原则,这些都是...

    2021-2025年中国闭式循环冷却水系统行业调研及服务竞争策略研究报告.pdf

    在该报告中,首先阐述了闭式循环冷却水系统行业服务竞争策略的研究方法与原则。研究原则包括坚持科学性、系统性、针对性、超前性等,而研究方法则涉及实证分析、专家访谈、比较研究等。这些研究原则和方法的确立,为...

    Java面试宝典基础篇1——设计模式和分布式事务.pdf

    这些原则包括:开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特法则、里氏替换原则、合成/聚合复用原则等。开闭原则强调对扩展开放,对修改封闭,意味着应该用抽象构建架构,用实现扩展软件的功能。...

    ADP_PAC1_P3:原理“开-闭”,“得墨忒耳定律”。 ADP PAC1 2014-2015 迟到(第 1 学期)问题 3

    ADP_PAC1_P3 原理“开-闭”,“得墨忒耳定律”。 ADP PAC1 2014-2015 秋季(第一学期)问题3 问题3 违反的原则是“开放-封闭”原则,特别是所谓的“德墨忒尔定律”或“不要与陌生人交谈”。 原因是在 Vehicle ...

    C++拔尖总结-多线程,维护,变量,函数,类,STL,网络基础,认识类,设计类,模板编译,linux结合,makefile等等

    "设计类"涉及到类的设计原则,如单一职责、开闭原则等,这有助于创建可维护和扩展的软件。 "多线程"是现代编程中常见的需求,C++11引入了标准库中的线程支持。理解和实现线程同步(如互斥量、条件变量)以及线程...

    电力系统配电网自动化研究.pdf

    开闭所自动化主要是对开关设备的远程控制,馈线自动化关注故障检测和隔离,调度自动化则负责收集运行数据并制定运行策略,以确保配电网的经济和安全运行。在设计这些模式方案时,需要充分考虑监控、管理和通信等各个...

    浅谈编程-浅谈编程-浅谈编程

    此外,我们要学会在编程中运用各种原则,如开闭原则(Open-Closed Principle)、依赖倒置原则(Dependency Inversion Principle)、接口隔离原则(Interface Segregation Principle)、里氏替换原则(Liskov ...

    从零开始学架构

    2. 架构设计原则:书中可能会探讨一些通用的架构设计原则,如单一职责原则、开闭原则、依赖倒置原则等,这些原则有助于创建灵活、可维护的系统。 3. 架构模式:书里可能会涵盖常见的架构模式,如微服务架构、分层...

    面向对象程序设计复习资料.doc

    设计七原则包括开闭原则、里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特原则、接口隔离原则、单一职责原则等。 面向对象的方法学 面向对象的方法学包括UML(统一建模语言)、RUP(统一软件开发过程)、...

    闭式弹性膜片自定心夹紧装置(cad+pro+说明书).zip机械设计毕业设计

    闭式弹性膜片自定心夹紧装置是一种在机械设计领域广泛应用的重要部件,尤其是在汽车工程、机械车辆等工业中...通过深入研究这些文件,可以提升对机械设计的理解,特别是对于弹性元件在机械系统中的应用有更深入的认识。

    第二十三讲:访问者模式

    1. **违反了“开闭原则”**:虽然访问者模式可以在不修改元素类的前提下添加新操作,但当元素类结构发生改变时,可能需要修改访问者接口,这违背了开闭原则。 2. **增加系统复杂性**:引入访问者模式会增加系统的类...

    NET软件工程师面试必备

    12. **软件工程原则**:理解SOLID原则,如单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。 13. **框架与库**:了解流行的开源.NET库,如AutoMapper、NLog、Unity等,以及它们在项目中的应用。...

    代码之殇(带书签扫描原书第2版)

    4. **软件设计原则**:书中阐述了 SOLID 原则,即单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则,这些都是构建可扩展、可维护系统的基础。 5. **项目管理**:除了技术层面,本书也关注项目...

    深入浅出设计模式第一章中文.zip

    2. 设计原则:包括开闭原则(Open-Closed Principle)、里氏替换原则(Liskov Substitution Principle)、依赖倒置原则(Dependency Inversion Principle)、单一职责原则(Single Responsibility Principle)、接口...

    Clean Architecture: A Craftsman’s Guide to Software Structure and Design

    他通过阐述一系列设计原则和模式(如单一职责原则、开闭原则、依赖倒置原则等)来帮助读者理解如何设计出好的软件架构。 整洁架构不仅仅是一系列技术实践的集合,它还包含了对软件开发过程的认识,以及如何构建一个...

    java教案 详细的介绍,适合入门者

    10. **面向对象设计原则**:介绍SOLID原则,包括单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。 11. **多线程**:讲解如何创建和管理线程,同步机制如synchronized关键字和wait()、notify()...

    Spring中的设计模式

    当然设计模式本身更重要的是设计原则的一种实现,比如开闭原则,依赖倒置原则,这些是在代码的修改和扩展上说事。说到底就是人类和代码发生关系的四种场合:阅读,修改,增加,删除。让每一种场合都比较舒服的话,就...

Global site tag (gtag.js) - Google Analytics