开放-封闭原则

Posted justinxhan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开放-封闭原则相关的知识,希望对你有一定的参考价值。

举个栗子,如果不是邓小平提出一国两制的思想,香港澳门不会那么顺利回归。

原因主要是大陆的社会主义制度不能修改,而香港澳门长期在资本主义制度下管理和发展,所以回归时强行修改香港澳门的制度也不合理,所以用“一国两制”来解决制度差异造成的矛盾是最合理的办法。

在软件设计模式中,这种不能修改,但可以扩展的思想也是最重要的一种设计原则,就是 开放-封闭原则(The Open-Closed Principle,简称OCP)

开放-封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。

这个原则有2个特征,一个是“对于扩展是开放的”,另一个是“对于更改是封闭的”。

 

何时应对变化

我们在做任何系统的时候,都不要指望系统一开始时需求确定,就再也不会变化,这是不现实也不科学的想法。

设计的时候,时刻要考虑,尽量让这个类足够好,写好了就不要去修改,如果新需求来,增加一些类就完事了,原来的代码能不动则不动。

绝对的修改关闭是不可能的。无论模块多么的“封闭”,都会存在一些无法对之封闭的变化。

既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。

他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。

我们很难预测,但我们却可以在发生小变化时,就及早想办法应对发生更大变化的可能。

在我们最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。

比如现在让你写一个加法程序,你在client类完成,此时变化还未发生。

然后我让你加一个减法,这时候你发现需要修改这个类,这就违背了开放-封闭原则

于是你考虑重构程序,增加一个抽象的算法类,继承它,每次只需要新增算法而不用修改client了

面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码

 

反思

学.net和学前端这两件事,.net学习是工作必须

所以学前端之前,.net学习不能更改,雷打不动的,这就是对修改关闭

但是如果只埋头学习.net,就等于放弃了将来很多好公司,和回老家的工作机会,毕竟.net只在北上广深才好找工作

所以完全可以抽出一点时间,在不影响.net学习和工作的前提下,来学习前端开发

既不影响.net学习和工作,又可以增加未来机会的可能性,这就是对扩展开放,对修改关闭的意义。

 

以上是关于开放-封闭原则的主要内容,如果未能解决你的问题,请参考以下文章

Charpter04 开放-封闭原则

设计原则之开放封闭原则

敏捷开发-开放封闭原则

考研求职两不误 开放封闭原则

深入浅出设计模式——开放封闭原则

西游记之设计模式原则——开放-封闭原则