经典力学的基石是牛顿三大定律。而面向对象的可复用设计(Object Oriented Design, OOD)的第一块基石,便是所谓的开-闭原则(Open-Closed Principle,OCP)
1.什么是开-闭原则
一个软件实体应当对扩展开放,对修改关闭。
2.怎样做到开-闭原则
不能修改而可以扩展似乎看起来是自相矛盾的。怎么可以不修改同时可以扩展呢?
玉帝招安美猴王
招安的关键在于不允许更改现有的天庭秩序,但允许将妖猴纳入现有的秩序中,从而扩展了这一秩序。用面向对象的语言来讲,不允许更改的是系统的抽象层,而允许扩展的是系统的实现层。
抽象化是关键
解决问题的关键在于抽象化。在Java语言中,可以给出一个或多个抽象Java类或接口,规定出所有的具体类必须提供的方法特征作为系统设计的抽象层。这个抽象层可预见所有的可能扩展,因此,在任何扩展情况下都不会改变。这就使得系统的抽象层不需修改,从而满足了开-闭原则的第二条:对修改关闭。
同时,从抽象层导出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的,这就满足了开-闭原则的第一条:对扩展开放。