最常见的解释:开闭原则中的“开”,是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的;开闭原则中的“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代码。
自己觉得防止更改的方法,就是抽象化,看看下边的例子大概就明白了。

所谓的开闭原则(Open-Closed Principle,简称 OCP)说的是:软件实体(类、模块、功能等)应该可以被扩展,但不可被修改。

开闭原则说白了就是,应该在不修改现有代码的基础上,引入新功能。
实际上,要做到百分之百的封闭是不可能的,但是在系统设计的时候,还是应该尽量做到这一点。

举个栗子:
一个简单的例子,假设现在需要实现一个加法的功能,很简单,如图示1:

现在的问题是,需求变了,要求还要实现一个减法的功能,这也很简单,如图示2:

如果需求再变,还要求能实现乘法和除法的功能,依然简单,如图示3:

从第2和第3步来看,很明显,在需求改变,需要引进新的功能的时候,做法是在已有的类的基础上通过新添方法来实现功能,假设在第2步之后,第3步的时候发现加法和减法功能
最终都没有用到,反而乘法和除法需要用到,那么在第3步的时候就要推翻第2步之前的实现,在需求发生改变需要引进新的功能的时候,就要推翻整个之前的系统,很明显这样的做法
是不可取的,说明设计上出现了问题,这个缺陷明显的是违反了OCP(开闭原则)。
需求总是在变的,如果可能,就要做到尽量不要去修改已有的实现,而应该通过扩展的手段来稳定需求的变动。

OCP原则替换图2:

OCP原则替换图3:

在我们最初编写代码的时候,我们假设变化不会发生,但最后变化发生的时候,可以通过创建抽象来隔离以后将要发生的同类变化。

开闭原则是面向对象设计中“可复用设计”的基础,是面向对象设计中最重要的原则之一。 从开闭原则中可以看出,面对对象的重要原则是创建抽象化,并且从抽象化中导出

具体化,具体化可以有许多不同的版本,而每个不同的版本可以给出不同的实现。

面向对象设计原则:开闭原则(OCP)相关推荐

  1. 面向对象软件设计的“开—闭”原则

    1.什么是开闭原则         "开-闭"原则是指软件实体应当对扩展性开放,对修改关闭.即软件实体应该在不修改的前提下扩展,这个原则实际上为软件设计指明了目标.我们知道软件设计 ...

  2. 六大设计原则--开闭原则

    定义 software entities like classes, modules and functions should be open for extension but closed for ...

  3. 带你认识六种设计原则(开闭原则、里氏代换原则、依赖倒转原则....)

    前言 1. 设计原则 1.1. 开-闭原则 1.2. 里氏代换原则 1.3. 依赖倒转原则 1.4. 接口隔离原则 1.5. 合成/聚合原则 1.6. 迪米特法则 前言 学习设计模式之前先要了解其中的 ...

  4. 一周技术学习笔记(第67期)-CPU的设计跟开闭原则有关系吗

    你能想到CPU的设计是开闭原则的设计吗 说CPU的设计很符合软件设计的开闭原则,估计一般的同学肯定不会这样意识到.其实我也一样不太可能把它们能够想在一起,并将它们关联起来. 可确实就这样发生了.实际上 ...

  5. 六大设计模式原则-开闭原则

    一.开闭原则定义 开闭原则是面向对象的可复用设计的第一块基石,是最重要的面向对象设计原则.定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修 ...

  6. 设计模式6大原则-开闭原则

    设计模式6大原则-开闭原则 定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 开闭原则理念就是当需求改变时,希望在不改变原有代码的前提下,通过扩展模块.函数来满足新需求. 开闭原则是其他 ...

  7. 设计模式之王者原则 开闭原则

    设计模式之王者原则  开闭原则 为什么说 它--开闭原则是王者原则呢? 因为所有原则都是围绕它来实现的,怎么说呢,为什么会有这么多原则呢,都是为了完成它,只要实现它你的代码就不会有什么大的问题 一.定 ...

  8. 设计一个扩展自抽象类geometricobject的新的triangle类_面向对象设计原则之开放封闭原则(开闭原则OCP)...

    (1) 定义 一个软件实体(类.模块.函数等),对于扩展是开放的,对于更改是封闭的. 对于扩展是开放的:这意味着模块的行为是可以扩展的.当应用的需求发生改变时,我们可以对模块进行扩展,比如增加新的类或 ...

  9. 漫谈面向对象基石之开闭原则(OCP)(转)

    原帖地址: http://www.cnblogs.com/yukaizhao/archive/2010/06/29/ood-ocp.html 开闭原则的意思是软件实体应该对扩展开发,对修改关闭(Sof ...

最新文章

  1. C++知识点41——运算符的重载概念与分数类实现(下)
  2. jQuery操作input
  3. queueing 优化_网站加载性能
  4. java定义byte_java Byte相关
  5. UCOS 操作系统 安装配置环境
  6. 技术人员如何创业《四》- 打造超强执行力团队(转载)
  7. MySQL出现慢日志超过2秒_MySQL慢日志功能分析及优化增强
  8. Chrome 对于 glyphicon 字体图标不显示的解决办法
  9. ubuntu10.04+hadoop0.20.2平台配置(完全分布式模式)
  10. [转载]依赖注入那些事
  11. 小说阅读器未能连接服务器怎么办,小强小说阅读器无法加载小说章节的解决方法...
  12. Python批量下载XKCD漫画只需20行命令!
  13. 用PS给证件照换底色
  14. java基于微信小程序的在线学习考试测试系统小程序 uniapp
  15. 大数据量分页存储过程效率测试附代码(转http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html)...
  16. 近期Domino相关产品要闻速览
  17. android 登陆微信一直卡在验证身份,微信登录需要滑块验证的时候,闪退返回至登录界面...
  18. 北航计算机2018年保研推免经历
  19. 【最全的大数据面试系列】Hadoop面试题大全(一)
  20. cocos做飞机大战笔记【玩家飞机移动与子弹发射】

热门文章

  1. 【python】time模块详解
  2. 2021洪湖一中高考成绩查询,2021湖北省高中排名一览表
  3. 微信小程序分享好友功能
  4. dfp方法例题_数学软件 之 基于MATLAB的DFP算法
  5. GO 快递接口开发(快递鸟)
  6. php apache getenv,PHP中getenv()函数
  7. pytorch多GPU训练实例与性能对比
  8. Linux NTP配置详解 (Network Time Protocol)
  9. 恭喜!1024博客专家TOP 50榜单出炉!
  10. 逆向分析 Android 程序