对扩展开放,对修改关闭。
无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。等到变化发生时立即采取行动
,创建抽象来隔离以后发生的同类变化
。比如,实现加法功能,在cilent类中完成的话,以后再加减法操作的时候,就需要修改client类了,就违背了“开闭原则”,这时就需要重构代码,增加一个抽象的运算类,通过继承、多态
等来隔离具体的加法、减法与client耦合
,需求依然满足,还能应对变化(乘除法)。
面对需求,对程序的改动是通过增加新代码进行的
,而不是更改现有的代码
。
好处:
可维护、可扩展、可复用、灵活性好。
注意:
对程序中呈现出频繁变化的部分作出抽象
,然而,对于程序中的每个部分都刻意进行抽象不是好主意
,拒绝不成熟的抽象和抽象本身一样重要。