上一篇我们介绍了单一职责 原则:http://blog.csdn.net/u010590685/article/details/47011803
今天我们来说说另外一个原则:开放封闭原则
中国有个成语叫纵横捭阖,其中捭阖的意思就是开合的意思。
《捭阖》是《鬼谷子》的开篇之作。捭为开启,阖为闭藏。捭阖之术,也就是开合有道、张弛有度。捭阖之术是世间万物运转的根本,也是纵横家游说的重要说术言略。既然万物都要开合有道,我们写代码对什么开放对什么封闭也是有规则的,这就是我们今天要说的开发封闭原则
定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
通常我们再做一个项目时系统的需求可能会发生变化,如果说需求一旦发生变化就把整个项目重新再来显然是不合理也不划算的,所以就要我们在设计的时候运用开放封闭原则,遇到需求功能我们通过新增类,接口等来扩展功能而不是修改原理的这样当我们的需求发生变化时,我们为变化的部分增加一个类或者接口之类的就可以,下次再变化我们增加一个该接口的实现或者继承这个类,这样代码的就变得清晰易维护了。下面我们举个例子
比如,刚开始需求只是写加法程序,很快在client类中完成后,此时变化没有发生,需求让再添加一个减法功能,此时会发现增加功能需要修改原来这个类,这就违背了开放-封闭原则,于是你就应该考虑重构程序,增加一个抽象的运算类,通过一些面向对象的手段,如继承、动态等来隔离具体加法、减法与client耦合,需求依然可以满足,还能应对变化。此时需求要添加乘除法功能,就不需要再去更改client及加减法类,而是增加乘法和除法子类即可。
但是我们也要认识到绝对的封闭式不存在的,正如古人说说孤阳不生,孤阴不长。绝对的修改关闭是不可能的,无论模块是多么的‘封闭‘,都会存在一些无法对之封闭的变化,既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。在我们最初编写代码时,假设变化不会发生,当变化发生时,我们就创建抽象来隔离以后发生同类的变化。
版权声明:本文为博主原创文章,转载请注明来源