OCP原则--“开—闭”原则

(摘自: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中扩展的要求。

 

扫描二维码关注公众号,回复: 820498 查看本文章

    设计模式中有好多种模式都在不同程度上达到了"开-闭"原则的要求,举几个例子:

 

    1.简单工厂模式

    "开-闭"原则要求模块允许新产品加入系统中,无需对现有代码进行修改在简单工厂中,对于产品的消费者是成立的,对于工厂是不成立的,每次增加一个新产品,都要修改工厂角色但是产品的消费者可以避免修改 。

 

    2.工厂方法模式

    工厂方法中,具体工厂类都有共同的接口,它们"生产"出很多的处于一个等级结构中的产品对象使用这个设计的系统可以允许向系统加入新的产品类型,而不必修改已有的代码,只需要加入一个新的具体的工厂就OK了,所以对增加新的产品而言,完全支持"开-闭"原则。

 

    3.抽象工厂模式

    抽象工厂模式封装了产品对象的家族的可变性,从而可以使系统动态决定将那一个产品族的产品实例化,另一方面可以在新的产品对象引进到已有的系统中时不必修改,在产品对象家族变化时,可以维持系统的"开-闭"原则 。

 

    4.BUILDER模式

    建造模式封装了建造一个有内部结构的产品对象的过程,因此这样的系统是向产品内部表象的改变开放的 。

 

    5.桥梁模式

    桥梁模式是"对可变性的封装原则"很好的例子,在桥梁模式中,具体实现化类同的实现逻辑,但是所有的具体实现化类又有共同的接口新的实现逻辑可以通过创建新的具体实现类加入到系统中。

 

    OCP是OOD的基本原则,只有深刻地理解了OCP原则,深刻理解JAVA中的接口与抽象类的用法,关键是语义,才可能设计出高可用性的,稳定性的系统。

猜你喜欢

转载自zhoushuping.iteye.com/blog/1073900
今日推荐