一、定义
开闭原则(OCP),英文全称是Open for
extention, Closed for modification
Principle,即对扩展开放,对修改关闭原则。该原则的思想是,可以通过扩展来满足变化,而不需要修改代码,或者说在设计一个模块的时候,应当使这
个模块可以在不被修改的前提下被扩展。
二、实现
实现开闭原则的关键是抽象,抽象是面向对象设计的一个核心特征。
对一个事物抽象化,实质上是在概括归纳总结它的本质。抽象让我们抓住最最重要的东西,从更高一层去思考,这降低了思考的复杂度,不用同时考虑太多的东西。
定义一个抽象层,只规定功能而不提供实现,实现通过定义具体类来完成。当需求变化时,不是通过修改抽象层来完成,而是通过重新定义抽象层的新实现来完成,即通过扩展来完成。换言之,定义一个一劳永逸的抽象设计层,允许尽可能多的行为在实现层被实现。
这样一来,通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,不需修改,从而满足“对修改关闭”;而从抽象类导出的具体类可以改变系统的行为,从而满足“对扩展开放”。
即使无法百分之百的做到“开-闭”原则,但朝这个方向努力,可以显著改善一个系统的结构。另一方面,对于系统的每个部分都肆意地进行抽象也不是一个好主意,应该仅仅对程序中需求频繁变化的部分进行抽象。拒绝不成熟的抽象和抽象本身一样重要。
三、好处
1)通过扩展已有软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性。
2)已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性。
3)这样的系统同时也满足了可复用性与可维护性。
四、总结
实现开闭原则的关键是抽象!抽象层相对稳定,不需修改,需求变化后通过重新定义抽象层的新实现来完成。
面向对象的基本原则(二)------开闭原则