(摘自:http://blog.csdn.net/sophia_sy/archive/2007/01/17/1485750.aspx)
面向对象设计(OOD)的第一块基石,就是"开-闭原则(Open-Closed principle,简称OCP),它的核心含意是:一个好的设计应该能够容纳新的功能需求的增加,但是增加的方式不是通过修改又有的模块(类),而是通过增加新的模块(类)来完成的。如果一个设计能够遵循OCP,那么就能够有效的避免上述的问题。
OCP原则认为:一个软件应该对扩展开放,对修改关闭。 这是由大师Bertrand Meyer提出,英文原文是:
Software entities should be open for extension,but closed for modification.
它认为,在设计模块时,软件应该使这个模块在不被修改的前提下被扩展,换句话,是不必修改源代码的情况改变模块的行为我们大家经常用到的一些类库就是按照这样的原则进行设计的,如SUN的JDK开发包遵守OCP原则的系统可以达到PNP的功能,即是可以插拨的。
个人认为,在JAVA中,要达到OCP,关键是抽象化,可以定义一个或多个接口 或抽象类,规定所有具体类必须实现的方法作为抽象层,这个抽象预见了你的系统或模块将来的扩展,因此在任何扩展情况下都不会改变这就使得系统的抽象层不需要修改,从而满足了OCP中对修改关闭的原则但是由于有具体实现的类可以扩展来改变系统的行为,所以系统的设计是开放的,满足了OCP中扩展的要求。
设计模式中有好多种模式都在不同程度上达到了"开-闭"原则的要求,举几个例子:
1.简单工厂模式
"开-闭"原则要求模块允许新产品加入系统中,无需对现有代码进行修改在简单工厂中,对于产品的消费者是成立的,对于工厂是不成立的,每次增加一个新产品,都要修改工厂角色但是产品的消费者可以避免修改 。
2.工厂方法模式
工厂方法中,具体工厂类都有共同的接口,它们"生产"出很多的处于一个等级结构中的产品对象使用这个设计的系统可以允许向系统加入新的产品类型,而不必修改已有的代码,只需要加入一个新的具体的工厂就OK了,所以对增加新的产品而言,完全支持"开-闭"原则。
3.抽象工厂模式
抽象工厂模式封装了产品对象的家族的可变性,从而可以使系统动态决定将那一个产品族的产品实例化,另一方面可以在新的产品对象引进到已有的系统中时不必修改,在产品对象家族变化时,可以维持系统的"开-闭"原则 。
4.BUILDER模式
建造模式封装了建造一个有内部结构的产品对象的过程,因此这样的系统是向产品内部表象的改变开放的 。
5.桥梁模式
桥梁模式是"对可变性的封装原则"很好的例子,在桥梁模式中,具体实现化类同的实现逻辑,但是所有的具体实现化类又有共同的接口新的实现逻辑可以通过创建新的具体实现类加入到系统中。
OCP是OOD的基本原则,只有深刻地理解了OCP原则,深刻理解JAVA中的接口与抽象类的用法,关键是语义,才可能设计出高可用性的,稳定性的系统。
分享到:
相关推荐
用uml软件介绍设计模式
Java Web设计模式之OCP(开闭原则) 如有疑问,请留言!
C# 版本,OCP原则的Demo,内部培训资料。
开闭原则OCP.zip
5 开闭原则-The Open-Closed Principle (OCP) 二 包的设计原则 6 重用发布等价原则-Release Reuse Equivalency Principle (REP) 7 无环依赖原则-The Acyclic Dependencies Principle (ADP) 8 稳定依赖...
目录网盘文件永久链接 OCP 1Z0-053讲解视频
一、“开-闭”原则(Open-Closed Principle,OCP) 1.1“开-闭”原则的定义及优点 1)定义:一个软件实体应当对扩展开放,对修改关闭( Software entities should be open for extension,but closed for modification....
资源分类:Python库 所属语言:Python 资源全名:ocp_windows_386-0.1.3-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
目录网盘文件永久链接 OCP 1Z0-051讲解视频
主要为大家详细介绍了ocp开闭原则的相关资料,ocp开闭原则指导我们如何建立一个稳定的、灵活的系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
。。。
。。。
本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle )。
里氏替换原则,开闭原则,满足OCP开闭原则的方案,内附有测试代码
主要介绍了Java设计模式编程中的开闭原则,开闭原则的大意被作者总结为用抽象构建框架,用实现扩展细节,需要的朋友可以参考下
主要介绍了PHP面向对象五大原则之开放-封闭原则(OCP),简单分析了PHP面向对象开放-封闭原则(OCP)的概念、原理、使用方法及相关注意事项,需要的朋友可以参考下
目录网盘文件永久链接 OCP 1Z0-052讲解视频
Which two statements are true about space - saving features in an Oracle Database? A.An index created with the UNUSABLE attribute has no segment. B.Private Temporary Tables(PTTs)store metadata in ...
开-闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开发,对修改关闭.说的是,再设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展.换言之,应当可以在不必修改源代码的情况下改变这个模块的...
Which two statements are true about Oracle synonyms? A.A synonym can be created on an object in a package B.A synonym can have a synonym C.Any user can create a PUBLIC synonym D.A synonym has an ...