1起源与发展
1.1梅耶开闭原则
伯特兰·梅耶一般被认为是最早提出开闭原则这一术语的人,在他1988年发行的《面向对象软件构造》中给出。这一想法认为一旦完成,一个类的实现只应该因错误而修改,新的或者改变的特性应该通过新建不同的类实现。新建的类可以通过继承的方式来重用原类的代码。衍生的子类可以或不可以拥有和原类相同的接口。
梅耶的定义提倡实现继承。具体实现可以通过继承方式来重用,但是接口规格不必如此。已存在的实现对于修改是封闭的,但是新的实现不必实现原有的接口。
1.2多态开闭原则
在20世纪90年代,开闭原则被广泛的重新定义。由于抽象化接口的使用,在这中间实现可以被改变,多种实现可以被创建,并且多态化的替换不同的实现。
相比梅耶的使用方式,多态开闭原则的定义倡导对抽象基类的继承。接口规约可以通过继承来重用,但是实现不必重用。已存在的接口对于修改是封闭的,并且新的实现必须,至少,实现那个接口。
罗伯特·C·马丁1996年发表的文章《开闭原则》是使用这种方法的启发式著作。在2001年,Craig Larman把开闭原则关联到了Alistair Cockburn的名为受护的变量的模式以及David Parnas关于信息隐藏的讨论。
2原理思想
2.1问题由来
在软件的生命周期内,因为变化,升级和维护等原因需要对软件原有代码进行修改,可能会给旧代码引入错误,也有可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。
2.2解决方式
当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现。
2.3定义
在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。
3意义与作用
开闭原则是面向对象程序设计的终极目标,它使软件实体具备稳定性和延续性的同时拥有一定的适应性和灵活性。
可维护性:遵守开闭原则的软件,其稳定性高和延续性强,从而易于扩展和维护。
可复用性:粒度越小,被复用的可能性就越大;在面向对象的程序设计中,根据原子和抽象编程可以提高代码的可复用性。
软件测试:软件遵守开闭原则的话,软件测试时只需要对扩展的代码进行测试就可以了,因为原有的测试代码仍然能够正常运行。
4实现方法
实现开闭原则可以通过“抽象约束、封装变化”来实现,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。
因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。
- 以抽象代替实现;
- 以抽象隔离变化;
- 避免不合理的抽象;
- 其他设计原则是实现开闭原则的一种手段。
单一原则要求做到类的职责单一,依赖倒置原则要求面向接口编程,迪米特法原则是要求做到降低耦合度,如果遵循了这些原则,那么自然的也就做到了开闭原则,因此可以说开闭原则是设计原则的总纲。
5视频连接
B站审核中……
参考链接:
百度百科
https://blog.csdn.net/sinat_35551809/article/details/52021536
来源:https://www.cnblogs.com/wq-7047/p/12572337.html