1 什么是开闭原则"开-闭"原则
    “开-闭”原则讲的是:一个软件系统应该对扩展是开放的,对修改是关闭的。英文原话:
    (Software entity should be open for extension, but closed for modification)
    这个原则说的是,在设计一个模块的时候,应该可以使这个模块可以在不被修改的前提下扩展其功能;而且可以在不必修改源代码的情况下改变这个模块的行为。
    满足了OCP(Open-Closed Principle)原则可以给软件系统带来两个无法比拟的优势:
  1.扩展性。通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求。
  2.稳定性。已有的软件模块,特别是最重要的抽象层模块不能被修改,这就是变化中的软件系统有一定的稳定性和可延续性。
2怎么做到“开-闭”原则
  抽象化是关键
  解决问题的关键在于抽象化。在像java这样的面向对象的语言中,可以给系统定义出一个一劳永逸,无需更改的抽象设计,此设计允许有无穷无尽的实现,并且互不影响。在java语言中,给出一个抽象的类或者接口,规定出具体方法必须提供的方法特征作为系统设计的抽象层。这个抽象层预见了所有的可能扩展,因此,在任何扩展情况下都不会改变。这就使得系统的抽象层不需要修改,从而满足了“开-闭”原则的第二条:对修改是关闭的。
  同时,由于从抽象层导出一个或多个新的具体类来实现抽象类或者接口就可以改变系统的行为,因此系统的设计对扩展时开放的,这就满足了“开-闭”原则的第一条。
  对可变性的封装原则 
  如何设计好抽象层的类或者接口,我们必须对系统的可变性进行封装。这就是所谓的”对可变性的封装原则"(Principle of Encapsulation of Variation short for EVP)。对可变性的封装原则讲的是找到一个系统的可变因素,将其封装起来。

“对可变性的封装原则”意味着两点:
 1.一种可变性不应散落在很多角落,而应当被封装到一个对象里面。
 2.一种可变性不应当与另一种可变性混合在一起。