面向对象的可复用设计(OOD)的第一块基石就是"开-闭"原则(OCP) 。

开闭原则讲的是:一个软件实体应当对扩展开放,对修改关闭。这个原则说的是,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。换言之,应当可以在不必修改源代码的情况下改变这个模块的行为。

满足“开-闭”原则的设计可以给一个软件系统带来两个无可比拟的优越性

* 通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性。

* 已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使得变化中的软件系统有一定的稳定性和延续性。

具有以上两个优点的软件系统是一个在高层次上实现了复用的系统,也是一个易于维护的系统。

开闭原则从另外一个角度讲述,就是所谓“对可变性的封装原则(EVP)”。这个原则讲的是找到一个系统的可变因素,将之封装起来。

可变性的封装原则意味着

1. 一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里面。同一种可变性的不同表象意味着同一个继承等级结构中的具体子类。

2.一种可变性不应当与另一种可变性混合在一起。