解决问题的关键在于抽象化。在像java这样的面向对象的语言中,可以给系统定义出一个一劳永逸,无需更改的抽象设计,此设计允许有无穷无尽的实现,并且互不影响。在java语言中,给出一个抽象的类或者接口,规定出具体方法必须提供的方法特征作为系统设计的抽象层。这个抽象层预见了所有的可能扩展,因此,在任何扩展情况下都不会改变。这就使得系统的抽象层不需要修改,从而满足了“开-闭”原则的第二条:对修改是关闭的。
同时,由于从抽象层导出一个或多个新的具体类来实现抽象类或者接口就可以改变系统的行为,因此系统的设计对扩展时开放的,这就满足了“开-闭”原则的第一条。
对可变性的封装原则
如何设计好抽象层的类或者接口,我们必须对系统的可变性进行封装。这就是所谓的”对可变性的封装原则"(Principle of Encapsulation of Variation short for EVP)。对可变性的封装原则讲的是找到一个系统的可变因素,将其封装起来。
“对可变性的封装原则”意味着两点:
1.一种可变性不应散落在很多角落,而应当被封装到一个对象里面。
2.一种可变性不应当与另一种可变性混合在一起。