OO设计原则 — The Open-Closed Principle:开放/封闭原则(OCP)

对于一个软件的实体(类,模块,函数等)应该是可以扩展的,但是不可被修改。

一、概要

开放/封闭原则(The Open-Closed Principle:OCP)是在面向对象设计中,类和模块等必须遵循以下规则:

 对于功能的扩展因该是开放的,即可以追加机能。

◇ 对于修改是封闭的,即既存的机能的实体是不可以修改的。

以上两条规则就是说“软件实体应当在不修改的前提下扩展”

开放/封闭原则(OCP)是面向对象设计的最基本的原则。也是之后的面向对象设计原则,

Package设计原则以及设计模式的基础。

二、OCP的优点

 很好的扩展性。OCP的对于扩展的开发原则,当系统要扩展或者添加新的行为的时候

       只需要添加 另外实现的模块即可。

 提供软件的安定性、稳定性。OCP的修改封闭原则,要在不修改既存代码的基础上

       进行机能的追加,对原机能影响很小,确保了安全性,同时也保证了原有机能的稳定性。

 再利用性。根据OCP原则设计的类和模块,一般都是可以设计出可重用的机能的抽象和接口等。

      同时,软件的各部分的耦合度也会很低,,使程序模块互换成为可能;

三、OCP实现的手法

实现OCP关键在于抽象,抽象出来的东西是不变的,具体的实现继承于抽象,所以保证了对修改的Close,

而抽象的实现方式有多种,可以随需添加,当然这也就是对扩展的Open。 另外要求的是技术包括,

多态 Polymorphism,接口 Interface,继承 Inheritance. 一般的抽象步骤如下:

 分析机能。

 定义出不需要修改的可以被再利用的Interface。

 通过继承Interface类,来实现机能的扩展和追加。

 

另外在对可变性进行封装的时候也应该注意以下几点:

 识别系统有可能变化的地方。 

 不要将一种可变形散布在多处代码,而应该封装起来。

 不要将一种可变性与另外一种可变性混在一起。  

 两种安全的实现开闭原则的设计模式是:Strategy pattern(策略模式),

      Template Methord(模版方法模式)。

 依据开闭原则,我们尽量不要修改类,只扩展类,但在有些情况下会出现一些比较怪异的

       状况,这时可以采用几个类进行组合来完成。

 将可能发生变化的部分封装成一个对象,如: 状态, 消息,,算法,数据结构等等,

      封装变化是实现"开闭原则"的一个重要手段,如经常发生变化的状态值,如温度,气压,颜色,积分,

     排名等等,可以将这些作为独立的属性,如果参数之间有关系,有必要进行抽象。

     对于行为,如果是基本不变的,则可以直接作为对象的方法,否则考虑抽象或者封装这些行为。


但是,由于软件的不确定性等原因,要想100%的按照OCP原则来进行软件设计是很困难的,

所以,我们实际过程中应该是尽可能的遵守OCP原则,而不是一味必须所有的都要遵守。

猜你喜欢

转载自blog.csdn.net/IO_Field/article/details/83269087