开闭原则原理

Posted veda0612

tags:

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

开闭原则视频链接https://www.bilibili.com/video/BV1WE411c7kE/

 

                                                                                      技术图片

   开闭原则是一种思想方法,没有具体实际操作的方法,它指导我们如何建立一个稳定的、灵活的同时具有延续性的系统。开闭原则是面向对象程序设计的最终目标,目标则是设计一个对扩展开放、对修改关闭的系统。 

开闭原则问题由来:

  在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。

解决方法:

  当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

开闭原则定义:

  一个软件实体(包括了软件模块、类、实体和方法等)应该对扩展开放,对修改关闭

                                                   技术图片

 

开闭原则的作用:

对软件测试的影响: 软件遵守开闭原则的话,软件测试时只需要对扩展的代码进行测试就可以了,因为原有的测试代码仍然能够正常运行。

可以提高代码的可复用性: 粒度越小,被复用的可能性就越大;在面向对象的程序设计中,根据原子和抽象编程可以提高代码的可复用性。

可以提高软件的可维护性: 遵守开闭原则的软件,其稳定性高和延续性强,从而易于扩展和维护。

 


 以上看完了过后应该会对开闭原则有个初步的了解,我们再来细致拆分下以便对开闭原则有深入了解:

“开”:指的是可以在源代码的基础上进行扩展,比如继承,接口,抽象类等。其实这也就对应于“对扩展开放”,意味着模块的行为是可以扩展的,这当然也要求程序员在写源码的时候就要考虑到未来的扩展与变化,高瞻远瞩,进行合理设计。

 

“闭”:指的是原本封装好的代码不允许做更改的操作。这自然是对应于“对修改关闭”,对模块行为进行扩展时,不必改动模块的源代码。其实这种行为也是为了保证接口功能尽量单一,不与其他的功能发生耦合,那么这样子的话也不会产生修改源码的必要性了。


如何使用开闭原则:

  • 抽象约束

第一,通过接口或者抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法;

第二,参数类型、引用对象尽量使用接口或者抽象类,而不是实现类;

第三,抽象层尽量保持稳定,一旦确定即不允许修改。

  • 元数据(metadata)控制模块行为

元数据就是用来描述环境和数据的数据,通俗地说就是配置参数,参数可以从文件中获得,也可以从数据库中获得。

Spring容器就是一个典型的元数据控制模块行为的例子,其中达到极致的就是控制反转(Inversion of Control)

  • 制定项目章程

在一个团队中,建立项目章程是非常重要的,因为章程中指定了所有人员都必须遵守的约定,对项目来说,约定优于配置。

  • 封装变化

对变化的封装包含两层含义:

第一,将相同的变化封装到一个接口或者抽象类中;

第二,将不同的变化封装到不同的接口或抽象类中,不应该有两个不同的变化出现在同一个接口或抽象类中。


总而言之,开闭原则是面向对象设计中最重要的原则之一,用抽象构建框架,用实现扩展细节。

 

参考资料:https://www.cnblogs.com/muzongyan/archive/2010/08/05/1793454.html

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

带构造函数的开闭原理

设计模式开闭原则

手撸golang 架构设计原则 开闭原则

开闭原则——面向对象程序设计原则

面向对象原则之一 开放封闭原则(开闭原则)

开闭原则