开闭原则原理

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

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

开闭原则问题由来:

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

解决方法:

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

开闭原则定义:

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

开闭原则的作用:

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

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

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



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

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

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



如何使用开闭原则:

  • 抽象约束

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

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

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

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

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

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

  • 制定项目章程

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

  • 封装变化

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

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

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



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

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

原文地址:https://www.cnblogs.com/veda0612/p/12548872.html

时间: 2024-10-08 10:41:57

开闭原则原理的相关文章

C#软件设计——小话设计模式原则之:开闭原则OCP

前言:这篇继续来看看开闭原则.废话少说,直接入正题. 软件设计原则系列文章索引 C#软件设计——小话设计模式原则之:依赖倒置原则DIP C#软件设计——小话设计模式原则之:单一职责原则SRP C#软件设计——小话设计模式原则之:接口隔离原则ISP C#软件设计——小话设计模式原则之:开闭原则OCP 一.原理介绍 1.官方定义 开闭原则,英文缩写OCP,全称Open Closed Principle. 原始定义:Software entities (classes, modules, functi

.NET 高级架构师 架构师之路(5)---开闭原则

2 开闭原则(Open-Closed Principle,OCP) 2.1 什么是开闭原则     开闭原则是面向对象设计中"可复用设计"的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段. 1988年,Bertrand Meyer在他的著作<Object Oriented Software Construction>中提出了开闭原则,它的原文是这样:"Software entities should be open for e

设计模式之6大原则(6)开闭原则

1. more第一版 实现基础功能,显示每一页固定24行文本,"q Enter"退出, "Enter" 下一行, "space Enter"下一页. /************************************************************************* > File Name: more01.c > Author: qianlv > Mail: [email protected] &

设计模式原则之开闭原则

开闭原则(OCP)是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段. 遵循开闭原则设计出的模块具有两个主要特征: (1)对于扩展是开放的(Open for extension).这意味着模块的行为是可以扩展的.当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为.也就是说,我们可以改变模块的功能. (2)对于修改是关闭的(Closed for modification).对模块行为进行扩展时,不必改动模块的源

设计模式之开闭原则

Open-Closed Principle软件设计中的“开-闭原则” 这个原则最早是由Bertrand Meyer提出,英文的原文是:Software entities should be open for extension,but closed for modification.意思是说,一个软件实体应当对扩展开放,对修改关闭.也就是说,我们在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,换句话说就是,应当可以在不必修改源代码的情况下改变这个模块的行为. 满足OCP的设计给

Java Web 设计模式之开闭原则

1.开闭原则(OCP) 遵循开闭原则设计出的模块具有两个主要特征: (1)对于扩展是开放的(Open for extension).这意味着模块的行为是可以扩展的.当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为.也就是说,我们可以改变模块的功能. (2)对于修改是关闭的(Closed for modification).对模块行为进行扩展时,不必改动模块的源代码或者二进制代码.模块的二进制可执行版本,无论是可链接的库.DLL或者.EXE文件,都无需改动. 2.通过UML

设计模式六大原则(6):开闭原则

开闭原则 定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来:在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试. 解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化. 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭.即软件实体应尽量在不修改原有代码

开闭原则

开闭原则:软件实体应该面对修改关闭,面对扩展开放,其实现核心是抽象,把相同的代码抽出来便于代码的重用就是闭   把不同的代码也抽出来便于功能的扩展这就是开    开闭原则是设计原则的核心原则,其他的设计原则都是开闭原则的具体体现和补充 抽象类: abstract class Job{ public abstract void work();//抽象方法 } 如果 一个方法只有定义.没有具体的内容,那么该方法就是抽象方法.使用关键字:public abstract void work(); 拥有抽

Python:面向对象的“开闭原则”和“鸭子类型”

开闭原则 开闭原则(OCP)是面向对象设计中"可复用设计"的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段. 1988年,勃兰特·梅耶(Bertrand Meyer)在他的著作<面向对象软件构造(Object Oriented Software Construction)>中提出了开闭原则,它的原文是这样:"Software entities should be open for extension,but closed fo