@完全的关闭是不可能的,设计的时候,猜测出变化,然后抽象出来,隔离这些变化。这是核心思想!!!
一个国家,两种制度,这在政治上,是伟大的发明。在软件设计模式中,这种不能修改,但可以扩展的思想也是最重要的一种设计原则,它就是开放-封闭原则(The Open-Closeed Principle[ˈprɪnsəpəl],简称OCP)或叫开-闭原则。
n. 原则,原理;准则,道义;道德标准;本能
一,开放-封闭原则:是说软件实体(类,模块,函数等等)应该可以扩展,但是不可修改。
两个特征:
1),一个是说,对于扩展是开放的(Open for extension)
2),另一个是说"对于更改时封闭的(Closed for modification)"
二,(需求是一定会变化的)我们在做任何系统的时候,都不要指望系统一开始时需求确定,就再也不会变化,这是不现实也不科学的想法,而既然需求是一定会变化的,那么如何在面对需求的变化时,设计的软件可以相对容易修改,不至于说,新需求一来,就要把整个程序推倒重来。怎样的设计才能面对需求的改变缺可以保持相对稳定,从而使得系统可以在第一个版本以后不断推出新的版本呢?开放-封闭给我们答案。设计软件要容易维护又不容易出问题的最好的办法,就是多扩展,少修改!!!
三,何时应对变化
1,开放-封闭原则的意思就是说,你设计的时候,时刻要考虑,尽量让这个类是足够好,写好了就不要去修改了,如果新需求来,我们增加一些类就往事了,原来的代码能不动则不动。这可能做到吗?不能,绝对的对修改关闭是不可能的。无论模块是多么的封闭,都会存在一些无法对之封闭的变化,既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化(看总结第二条)。
2,变化的预测是很难做到的,所以,我们应该再发生小变化时,就及早的去想办法应对发生更大变化的可能,也就是说,等到变化发生时,立即采取行动。正所谓,同一地方,摔第一跤,不是你的错,再次在此摔跤就是你的不对了。
@总结:
1,面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。这就是开放-封闭原则的精神所在。
2,开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护,可扩展,可复用,灵活性好。开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,然而,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。切记,切记。
3,该原则在其他原则中都有体现,所以具体实例,可以再其他原则实例中参考!!!--------实例看其他
4,最核心的原则,最基础的原则,其他一些原则离开了它,就不能存活,也没有了意义,例如,依赖倒置原则,假如不对修改关闭,不对扩展开放,那依赖接口或者抽象类,也就没有了意义。
---总之,开放-封闭原则是面向对象最核心的思想,所有代码中,都应该时刻遵循这一原则。