简介
什么是开闭原则
开闭原则(Open Closed Principle):一个软件实体应该对扩展开放,对修改关闭。
软件实体
软件实体指的是如类、模块和函数。
为什么要遵守开闭原则
需求的变动是任何一软件系统都难以避免的问题,在需求变动时,如果软件系统遵守开闭原则,那么就能不修改原有代码,而是在现有的代码的基础上进行扩展。在软件规模越来越大,寿命越来越长的今天,遵守开闭原则变得尤其重要。
如何遵守软件符合开闭原则
抽象化。
优缺点
优点
待补充
缺点
待补充
问题
有哪些设计模式遵循了开闭原则
- 工厂方法模式。在工厂方法模式中,当需要新增一种产品时,只需要新增一个产品类和工厂类即可,不需要修改原有代码。
- 抽象工厂模式。增加新的具体工厂和产品族很方便,无须修改已有系统。
- 建造者模式。指挥者类针对抽象建造者类编程,增加新的具体建造者无须修改原有类库的代码,系统扩展方便。
- 适配器模式。可以在不修改原有代码的基础上增加新的适配器类。
- 桥接模式。在抽象部分和实现部分两个变化维度中任意扩展一个维度,都不需要修改原有代码。
- 组合模式。在组合模式中新增叶子构件和容器构件都很方便。
- 装饰模式。客户端可以根据具体需要添加具体构建类和具体装饰类,并进行组合。
- 责任链模式。想要新增一个处理者,只需要在客户端中重新建立链即可,原有系统不需要修改。
- 命令模式。加入新的具体命令类不会影响原有系统。
- 解释器模式。在解释器模式中,增加新的解释表达式较为方便。如果需要增加新的解释表达式,只需要对应增加一个新的终结符表达式或非终结符表达式类,原有表达式类代码无须修改。
- 迭代器模式。由于有抽象聚合类和抽象迭代器类,添加新的聚合类和迭代器都不需要修改原有代码。
- 中介者模式。如果需要引入新的具体同事类,只需要继承抽象同事类并实现其中的方法即可,由于具体同事类之间并无直接的引用关系,因此原有所有同事类无须进行任何修改,它们与新增同事对象之间的交互可以通过修改或者增加具体中介者类来实现。如果需要增加新的具体中介者类,只需要继承抽象中介者类(或已有的具体中介者类)并覆盖其中定义的方法即可,在新的具体中介者中可以通过不同的方式来处理对象之间的交互,也可以增加对新增同事的引用和调用。
- 观察者模式。可以在不修改原有系统的条件下灵活的新建新的策略。
- 模板方法模式。可以在不修改原有代码的前提下灵活的新增具体子类。
- 部分遵守开闭原则。为什么说部分遵守呢?因为新增新的访问操作很方便,仅需要增加一个新的访问者即可在一个对象结构上定义一个新的操作。但如果需要新增元素类,要在抽象访问者角色中增加一个新的抽象操作,并在每一个具体访问者类中增加相应的具体操作。
欢迎补充。
在软件开发中,你在哪里用到了开闭原则?
欢迎补充。