开闭原则

OCP-开闭原则

情到浓时终转凉″ 提交于 2019-11-30 02:51:01
开闭原则(OCP:Open-Closed Principle) 简单来说,就是:对扩展开放,对修改关闭。 描述长一点,就是:在设计一个软件系统模块(类,方法)的时候,应该可以在不修改原有的模块(修改关闭)的基础上,能扩展其功能(扩展开放)。(百度知道上的回答,这句话我背下来了) 为什么要遵守开闭原则? 1.稳定性。2.扩展性。 稳定性:避免代码经常修改/避免代码修改,可以避免因修改引入bug。这有利于使原有系统保持稳定。 扩展性:随着需求的改变和增加,我们需要对原有系统功能进行扩展。(来提供新的功能和改变原有的功能) 以上,是比较抽象、准确的解释。 下面说一个应用场景: 极端情况下,代码一经提交,不可修改。(特性1必须满足。但是系统不可能永远一成不变,然后就有了第二个特性) 以上,就是我对开闭原则的理解。 闲聊一下生活中开闭原则理解: 一个人的思想就像一个黑箱,(形成的)观念就像黑箱中的代码——一旦形成,(几近)不可修改(对修改关闭)。所以,靠否定去说服一个人是很困难的。 如何改变一个人的思想呢?那就是给他输入新的思想(对扩展开放):先说服那个人接受新的观念(可以从最基础的认知层面开始,然后进行逻辑推理-严密的,得出结论),假如新的观念和他旧有的观念发生冲突,必然会重新审视自己的观念,使新的观念和旧有的(所有)观念进行融合,使其不矛盾、不冲突。假如,他认为新的观念是对的

快速理解 SOLID (面向对象设计)——开闭原则

陌路散爱 提交于 2019-11-29 14:07:23
快速理解 SOLID (面向对象设计)——开闭原则 在程序设计领域, SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转),指代了面向对象编程和面向对象设计的五个基本原则。当这些原则被一起应用时,它们使得一个程序员开发一个容易进行软件维护和扩展的系统变得更加可能。 1. 开闭原则 1.1 开闭原则 的定义 开闭原则 不是一种编程方法,而是一种编程思想。 程序应该是对于扩展开放的,但是对于修改封闭的。 1.2 开闭原则 解决了什么问题 在项目运营期间,难免会以为需求变化,升级,维护等原因需要对代码修改。而在修改过程中有可能会对原有功能的破坏。 1.3 开闭原则 举个例子 开闭原则没有什么特定的方法实现,其实开闭原则就是对其他的设计原则的总结。做好其他的设计原则自然而然的实现了开闭原则。 1.4 开闭原则 的总结 开闭原则不是一种编程方法,而是一种编程思想。 关注我的微信公众号,查看更多文章,第一时间收到我的文章。 来源: https://blog.csdn.net/qq_18208265/article/details/100827453

面向对象设计原则之开闭原则

爷,独闯天下 提交于 2019-11-29 05:50:43
开闭原则相关的面向对象设计原则() 里氏代换原则(Liskov Substitution Principle LSP) 依赖倒转原则(Dependence Inversion Principle)单一职责原则:应该有且仅有一个原因引起类的变更(一个接口或一个类只有一个原则,它就只负责一件事) 里式替换原则:子类型必须能替换掉它们的基类型 依赖倒置原则 : 高层模块不应该依赖低层模块,两者都应该依赖其抽象 抽象不应该依赖细节 细节应该依赖抽象 接口隔离原则: 客户端不应该依赖它不需要的接口 类间的依赖关系应该建立在最小的接口上 迪米特法则:只与直接朋友进行通信 来源: https://www.cnblogs.com/CKhomepage/p/10624802.html

GOF23种设计模式(Design Pattern)总结

吃可爱长大的小学妹 提交于 2019-11-28 22:15:31
GOF23种设计模式(Design Pattern)总结 设计模式 常用程度 适用层次 引入时机 结构复杂度 Abstract Factory 比较常用 应用级 设计时 比较复杂 Builder 一般 代码级 编码时 一般 Factory Method 很常用 代码级 编码时 简单 Prototype 不太常用 应用级 编码时、重构时 比较简单 Singleton 很常用 代码级、应用级 设计时、编码时 简单 Adapter 一般 代码级 重构时 一般 Bridge 一般 代码级 设计时、编码时 一般 Composite 比较常用 代码级 编码时、重构时 比较复杂 Decorator 一般 代码级 重构时 比较复杂 Facade 很常用 应用级、构架级 设计时、编码时 简单 Flyweight 不太常用 代码级、应用级 设计时 一般 Proxy 比较常用 应用级、构架级 设计时、编码时 简单 Chain of Resp. 不太常用 应用级、构架级 设计时、编码时 比较复杂 Command 比较常用 应用级 设计时、编码时 比较简单 Interpreter 不太常用 应用级 设计时 比较复杂 Iterator 一般 代码级、应用级 编码时、重构时 比较简单 Mediator 一般 应用级、构架级 编码时、重构时 一般 Memento 一般 代码级 编码时 比较简单 Observer

【设计模式笔记】开闭原则

限于喜欢 提交于 2019-11-28 11:59:31
开闭原则 OCP / Open Closed Principle 尚硅谷设计模式-学习笔记 ---------------- 开闭基本介绍 开闭原则是编程 最基础,最重要的设计原则 一个软件实体如类,模块,方法,应该 对扩展开放 (对提供方), 对修改关闭 (对使用方); 用抽象构建框架,用实现扩展细节 。 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化 编程中遵循其他原则,以及使用设计模式的目的就是遵循开闭原则。 ---------------- 开闭原则实例 实例简介:完成一个画图形的功能 Example:传统方式 public class OCP1 { public static void main ( String [ ] args ) { //使用看看存在的问题是什么 GraphicEditor graphicEditor = new GraphicEditor ( ) ; graphicEditor . drawShape ( new Rectangle ( ) ) ; graphicEditor . drawShape ( new Circle ( ) ) ; } } //这是一个用于绘图的类[使用方] //接受Shape对象,根据其type绘制不同的图形 class GraphicEditor { public void

面向对象设计原则

[亡魂溺海] 提交于 2019-11-28 05:28:57
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员经理根据7条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。 1. 开闭原则(Open Closed Principle, OCP) 软件实体应该对扩展开放,对修改关闭。 这里的软件实体包括以下几个部分: 1) 项目中划分出的模块 2) 类与接口 3) 方法 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码的前提下,可以扩展模块的功能,使其满足新的需求。 1.1 作用 开闭原则是面向对象程序设计的终极目标,它使软件实体拥有一定的适应性和了灵活性的同事具备稳定性和延续性。具体来说,其作用如下: (1) 对软件测试的影响 软件遵守开闭原则的话,软件测试时只需要对扩展的代码进行测试就可以了,因为原有的测试代码仍然能够正常原型。 (2) 可以提高代码的可复用性 粒度越小,被复用的可能性就约到;在面对对象的程序设计中,更具原子核抽象编程可以提高代码的可服用性。 (3) 可以提高软件的可维护性 遵守开闭原则的软件,其稳定性高和延续性强,从而抑郁扩展和维护。 1.2 实现方法 可以通过“抽象约束、封装变化”来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。 因为抽象灵活性好,实用性广,只要抽象的合理

23种设计模式

試著忘記壹切 提交于 2019-11-27 05:49:28
设计模式的六大设计原则 开闭原则(O) :对扩展开放,对修改关闭。开闭原则是总原则,指尽量高度抽象,易扩展。 单一原则(S) :一个类的接口抽象一个职责。 里氏替换原测(L) :里氏替换是对开闭原则的补充,开闭原则为接口抽象,里氏替换则为接口的具体实现。 依赖倒置原则(D) :面向接口编程,不跟具体实现类交互,跟接口交互。 接口隔离原则(I) :每个接口的实现类必须是完全实现,如果说子类中存在不需要实现的方法,那么接口应该把这个方法拆分出去。 迪米特法则(D) :一个类对自己的依赖应该是知道的越少越好,只需要关注调用的public方法。 23种Java设计模式 来源: https://blog.csdn.net/weixin_39506910/article/details/99451389

设计模式之六大原则——开闭原则(OCP)

此生再无相见时 提交于 2019-11-27 04:57:48
开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统。 定义: 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 Softeware entities like classes,modules and functions should be open for extension but closed for modifications. 开闭原则的含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有代码来实现变化。 软件实体包括以下几个部分: 项目或软件产品中按照一定的逻辑规则划分的模块 抽象和类 方法 开闭原则是为软件实体的未来事物而制定的对现行开发设计进行约束的一个原则。 注意:开闭原则对扩展开放,对修改关闭,并不意味着不做任何修改,低层模块的变更,必然要有高层模块进行耦合,否则就是一个孤立无意义的代码片段了。 变化的类型: 逻辑变化 子模块变化 可见试图变化 一个项目的基本路径应该是这样的:项目开发、重构、测试、投产、运维,其中的重构可以对原有的设计和代码进行修改,运维尽量减少对原有代码修改,保持历史代码的纯洁性,提高系统的稳定性。 开闭原则的重要性: 开闭原则对测试的影响 开闭原则可是保持原有的测试代码仍然能够正常运行,我们只需要对扩展的代码进行测试就可以了。

六大设计原则之开闭原则

江枫思渺然 提交于 2019-11-27 04:57:33
定义:一个软件实体。如类/模块/函都应该对扩展开放,对修改关闭。 问题由来:在软件的生命周期内,因为变化,升级和维护等原因需要对软件原有代码进行修改,可能会给旧代码引入错误,也有可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。 解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现。   开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统,开闭原则只定义了对修改关闭,对扩展开放。其实只要遵循前面5中设计模式,设计出来的软件就是符合开闭原则的。    用抽象构建架构,用实现扩展细节 。因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保证架构的稳定。而软件中易变的细节,我们用从抽象派生的实现类来进行扩展,当软件需要发生变化时,我们只需要根据需求重新派生一个实现类来扩展就可以了,当然前提是抽象要合理,要对需求的变更有前瞻性和预见性。 单一职责原则告诉我们实现类要职责单一; 里氏替换原则告诉我们不要破坏继承关系; 依赖倒置原则告诉我们要面向接口编程; 接口隔离原则告诉我们在设计接口的时候要精简单一; 迪米特法则告诉我们要降低耦合 开闭原则告诉我们要对扩展开发,对修改关闭; 那么如何去遵守这六个原则,对这六个原则的遵守并不是是和否的问题,而是多和少的问题,也就是说,我们一般不会说有没有遵守