开闭原则
对扩展开放,对修改关闭
抽象化是关键
可以给系统定义一个一劳永逸、不再更改的抽象设计,此设计允许有无穷无尽的行为在实现层被实现。这个抽象层预见了所有的可能扩展,因此,在任何情况下都不会改变,对修改是关闭的;同时,由于从抽象层导出一个或多个新的具体类,可以改变系统的行为,对扩展是开放的。
对可变性的封装原则
“开闭”原则从另一个角度讲述,就是所谓的“对可变性的封装原则”,找到一个系统的可变因素,将之封装起来。
与通常将焦点放到什么会导致设计改变的思想方式正好相反,这一思路考虑的不是什么会导致设计改变,而是考虑你允许什么发生变化而不让这一变化导致重新设计。
对可变性的封装意味着两点:
1、一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里。同一种可变性的不同表象意味着同一个继承关系等级结构中的具体子类,需要通过继承实现。继承应当被看作是封装变化的方法,而不应当是从一般的对象生成特殊的对象的方法。
2、一种可变性不应当与另一种可变性混合在一起。
一个重构做法--将条件转移语句改写成多态性
应当从“开闭”原则出发来做出是否进行重构的判断。如果一个条件转移语句确实封装了某种商务逻辑的可变性,那么将这种可变性封装起来就符合“开闭”原则的设计思想了。