2、面向对象设计模式之开放封闭(开闭)原则

开闭原则(Open-Closed Principle,OCP)定义如下:

  一个软件实体应当对扩展开放,对修改关闭。也就是说在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变这个模块的行为。

  软件实体,比如说类,模块,功能等,应当为扩展开放,但是对修改关闭,什么意思呢?就是说,在一个现有的工程完毕之后,以后所有新添加的功能应当在不修改原有代码的基础上进行,不应当在已有的代码上进行任何的代码修改或者逻辑添加操作。

  开闭原则由Bertrand Meyer于1988年提出,它是面向对象设计中最重要的设计原则之一。

  在开闭原则的定义中,软件实体可以指一个软件模块、一个由多个类组成的局部构成或一个独立的类。

  抽象化是开闭原则的关键。

  开闭原则还可以通过一个更加具体的“对可变性封装原则”来描述,对可变性封装原则(Principle Encapsulation of Variation,EVP)要求找到系统的可变因素并将其封装起来。

  我们希望在开发工作不久就知道可能发生的变化,查明可能发生的变化等待的时间越长,要创建正确的抽象就越困难。开闭原则是面向对象设计的核心所在。

  遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护,可扩展,可复用,灵活性好。开发人员应该对程序中呈现出频繁变化的那些部分做出抽象。

  然而,对于应用程序的每个部分都可以进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。尽量的抽象并非好事。