聊一聊开闭原则(OCP).
简述

在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。<百度百科>
最早提出(梅耶开闭原则)
开闭原则最早是出现在软件行业术语里。一个叫伯特兰·迈耶的法国人在他的1988年《面向对象软件构造》中提出。一个类一旦完成,那么只能因为发生错误而修改它,新的特点或者新的功能应该是通过不同的类去实现。他呢主张通过extends的方式去来重写原有的功能,已经实现过的功能应该是封闭的,注意是继承而不一定是实现
重新定义(多态开闭原则)
到了20世纪90年代,开闭原则被广泛的重新定义由于抽象化接口的使用,在这中间实现可以被改变,多种实现可以被创建,并且多态化的替换不同的实现。即我们有一个接口(抽象类)多个不同的实现,应对多个不同的场景,但是约定是一样的!
同样是吃饭比赛,有很多不同的吃法!这个已经接近现在编程的思想了!已经可以面向接口编程!
深入探讨
OCP的两个特点
对外扩展开放(Open for extension)
当我们的需求要改变时,那么我们可以对功能进行扩展,使得满足新的功能。
对内修改关闭
对关注点进行扩展时,不必修改已有的核心代码,而达到扩展新功能的目的。
来源:敏捷软件开发-OCP
上面提到,软件中的对象,从大到小无非就是模块、类、函数。通过开闭原则的思想,即是已经完成的通过测试的软件对象我们不应该是修改它,而是去扩展它!
那么到底什么是修改?在我们平时的开发过程,修改一个类的提交很正常!修改一个方法也很正常!那么怎么定义是扩展还是修改?很显示这种定位是非常的困难!所谓国有国法、家有家规!我们可以借鉴前人的思想来断定一些比较难以界定的问题。
抽象
由程序员的编码经验和所在的业务经验所得出的结论,抽出不可变化的(即共同的),对外扩展出抽象方法!但做到这一点是不容易的,谁也不能100%的确定哪块业务不会更改,哪块业务不会变动!既然不可能,那就向尽可能的方向上去走!就算你是一个小白,当你第二次修改相同的代码块时,应该考虑在不修改原使代码的前提下通过重写、多态、继承、组合等方式重新实现一次?这样才能叠加自身的编程buffer!
通常我们都会认为,只要代码能跑我就不会动,只要能加两行代码我就不会重新的去实现!但是有的时候尽管我们做了很多的过度的设计,也可能他代码写上去一辈子也不会动,但是还是用了某某设计模式去实现它,使得变的扩展性更强!我想这种做法是值提提倡的、因为它给我们自身带来了很多的想法!假如某一天就用上了呢?这谁也说不定!有时候多想想是好的!
关闭修改、对外扩展?
如果某功能有一个bug,那么我们在原来的代码上打补丁,这种修改我认为是被允许的!
如果要开发一个新功能,但是与已经存在的代码80%的实现相同,投机取巧的我加了个入参,然后在原代码里接着写
if else代码块,那么我认为是不可取的!某一天我要在某个类里加个属性,而不是修改某个属性我也认为是可取的!
还有很多...
大概什么是修改、什么是扩展,我想真的自己切身体会才能明白其中的道理!
聊一聊开闭原则(OCP).的更多相关文章
- C#软件设计——小话设计模式原则之:开闭原则OCP
前言:这篇继续来看看开闭原则.废话少说,直接入正题. 软件设计原则系列文章索引 C#软件设计——小话设计模式原则之:依赖倒置原则DIP C#软件设计——小话设计模式原则之:单一职责原则SRP C#软件 ...
- 7.10 其他面向对象设计原则1: 开-闭原则OCP
其他面向对象设计原则1: 开-闭原则OCP Open-Closed Principle (OCP)5.1 设计变坏的前兆 Signs of Rotting Design 僵硬性 Rigidit ...
- 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle ). 开闭原则的描述是: Software ...
- 设计原则:开闭原则(OCP)
1.什么是开闭原则 开闭原则的英文是Open Closed Principle,缩写就是OCP.其定义如下: 软件实体(模块.类.方法等)应该"对扩展开放.对修改关闭". 从定义上 ...
- 【设计模式】之开闭原则(OCP)
开闭原则是面向对象设计的一个重要原则,其定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭.即软件实体应尽量在不修改原有代码的情况下进 ...
- 【面向对象设计原则】之开闭原则(OCP)
开闭原则是面向对象设计的一个重要原则,其定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭.即软件实体应尽量在不修改原有代码的情况下进 ...
- JavaScript 开闭原则OCP
代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...
- 开放-封闭原则(OCP)开-闭原则 和 依赖倒转原则,单一职责原则
单一职责原则 1.单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因 2.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或抑制这个类完成其他职责的能力. ...
- 设计模式笔记:开闭原则(OCP,The Open-Closed Principle)
1. 开闭原则概述 开闭原则(OCP,The Open-Closed Principle)两个主要特征: (1)对扩展开放(open for extension):模块的行为的可以扩展的,当应用的需求 ...
随机推荐
- 华为应用市场更新APP多次被拒
最近公司的APP发布了新版本,只进行了线上bug的修复,基本没改什么主体业务功能.各大应用市场都顺利更新上架,但是国货之光华为,被闷了几次.拒来拒去,就是那些反复的内容.内容一般如下: 经检测发现,您 ...
- 【现学现卖】python小爬虫
1.给小表弟汇总一个院校列表,想来想去可以写一个小爬虫爬下来方便些,所以就看了看怎么用python写,到了基本能用的程度,没有什么特别的技巧,大多都是百度搜的,遇事不决问百度啦 2.基本流程就是: 用 ...
- NOIP 模拟 $15\; \text{影子}$
题解 \(by\;zj\varphi\) 一道并查集的题 对于它路径上点权,我们可以转化一下:对于一个点,它在哪些路径上是最小的点权 那么我们排个序,从大到小加入点,每回加入时,将这个点与它所相连的且 ...
- MongoDB使用命令创建用户权错误分析--- 权限不够Error:couldn't add user:command createUser requires authentication
MongoDB使用命令创建用户权错误分析 错误一:权限不够Error:couldn't add user:command createUser requires authentication. 解决方 ...
- springboot整合多数据源解决分布式事务
一.前言 springboot整合多数据源解决分布式事务. 1.多数据源采用分包策略 2.全局分布式事务管理:jta-atomikos. ...
- 在VS工程中,添加c/c++工程中外部头文件(.h),lib库,dll库的基本步骤
选择工程,右键-工程属性 其中: VC++目录 -->包含目录,对所有的项目及未来新建的项目都有效 c/c++-->常规-->附加包含目录,仅对当前项目有效 绝对路径设置方法: 在V ...
- C#中的垃圾回收
- SQLServer 判断文件是否存在
根据20190621工作写的逻辑,以后可根据实际情况再做修改.顺便记录一下游标的使用,加强记忆. DECLARE @Id NVARCHAR(MAX) DECLARE @UserName NVARCHA ...
- Linux命令:ps -ef |grep java
一.ps -ef |grep java 查看包含"java"的所有进程 二.涉及命令详解 ps命令将某个进程显示出来(是LINUX下最常用的也是非常强大的进程查看命令) grep命 ...
- Js/jquery常用
id属性不能有空格 1. js判断checkebox是否被选中 var ischecked = document.getElementById("xxx").checked // ...