定义

  一个软件实体(如类、模块、函数)应当对扩展开放,对修改关闭。

定义解读

  在项目开发的时候,都不能指望需求是确定不变化的,大部分情况下,需求是变化的。那么如何应对需求变化的情况?这就是开放-关闭原则要谈的。

  开放-封闭原则的思想就是设计的时候,尽量让设计的类做好后就不再修改,如果有新的需求,通过新加类的方式来满足,而不去修改现有的类(代码)。那么在实际的项目开发中,是否能做到绝对的对修改关闭呢?答案一般也是否定的。既然这样,那么就要求我们在开发前,去找出变化点,然后针对变化点构造抽象,隔离出这些变化。由此可见,实现开闭原则关键是抽象。

优点

  • 具有灵活性,通过拓展一个功能模块即可实现功能的扩充,不需修改内部代码。
  • 具有稳定性,表现在基本功能类不允许被修改,使得被破坏的程度大大下降。

总结

  对于设计模式的六大设计原则,单一职责原则主要说明类的职责要单一;里氏替换原则强调不要破坏继承体系;依赖倒置原则描述要面向接口编程;接口隔离原则讲解设计接口的时候要精简;迪米特法则告诉我们要降低耦合;开闭原则讲述的是对扩展开放,对修改关闭。

  六大设计原则并没有很明显的界限,当我们在遵守某一个设计原则的时候,可能也遵守了其他的设计原则。设计原则是后面要讲述的设计模式的基础,因此在本系列讲述设计模式之前,对设计原则进行了解说。

  返回目录

转载于:https://www.cnblogs.com/goflee/p/3484566.html

IOS设计模式的六大设计原则之开放-关闭原则(OCP,Open-Close Principle)相关推荐

  1. 面向对象的七种原则:单一职责原则,开放关闭原则

    我们的知识星球马上就要开始更新设计模式了,在更新设计模式之前,我们是不是需要做一些准备呢?否则设计模式中一些遵循的原则大家会一头雾水,所以我今天来给大家说一些面向对象的七种原则,有人说是6种有人说是7 ...

  2. 设计模式之六大设计原则【入门】

    设计模式之六大设计原则 1 开闭原则 Open Closed Principle,OCP 1.1 概念 1.2 软件实体 1.3 开闭原则的作用 2. 单一职责原则 Single responsibi ...

  3. 设计模式的六大设计原则

    设计模式的六大设计原则 1. 开闭原则 1.1 开闭原则:Open Closed Principle,OCP 1.2 开闭原则的作用 2. 单一责任原则 2.1 单一职责原则:Single respo ...

  4. 大话设计模式三之单一职责原则、开放-封闭原则、依赖倒置原则、里氏代换原则

    单一职责原则 单一职责原则(SRP),意思就是说,功能要单一.准确解释是,就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或 ...

  5. 设计原则之开放-封闭原则

    参考资料 曾探<JavaScript设计模式与开发实践>: <JavaScript设计模式与开发实践>原则篇(3)-- 开放-封闭原则 设计原则和编程技巧之开放-封闭原则 定义 ...

  6. 设计原则 单一职责原则、开放封闭原则、依赖倒置原则、里氏代换原则、迪米特法则

    目录 1 单一职责原则 2 开放封闭原则 3 依赖倒置原则 4 里氏代换原则 5 迪米特法则 1 单一职责原则 比如:电脑内存坏了就应该更换内存,不应该更换CPU (内存负责内存.CPU负责CPU) ...

  7. [转] 设计模式的六大设计原则

    转载说明: 感谢原作者吕震宇老师的分享. 原文参考链接:https://www.cnblogs.com/zhenyulu/category/6930.html? 本次转载只用于个人学习使用,并不涉及商 ...

  8. 设计模式之六大设计原则

    文章目录 一.六大设计原则(实际有七个) 1.单一职责 2.里氏替换原则 3.依赖倒置原则 4.接口隔离原则 5.迪米特法则(最少知道原则) 6.开闭原则 7.合成复用原则 二.总结 一.六大设计原则 ...

  9. 面向对象有哪几种常用的设计模式,六大设计原则是什么

    常用设计模式:单例模式(有的叫单元素模式,单态模式),工厂模式,观察者模式,命令链模式,策略模式. 1),OCP原则(也叫开闭原则) 2),SRP原则(职责单一原则) 3),OCP原则(里氏替换原则) ...

最新文章

  1. Dockerfile使用,怎么通过Dockerfile完成docker映像配置
  2. 从技术输出到产业赋能,网易云信走过的四年
  3. Jfreechart柱形图设置数值显示
  4. Snipaste截图
  5. 我到底该信谁?另外,我发现了抢火车票的秘密
  6. cad中lisp文件给恶作剧_CAD中LISP程序使用方法
  7. 深度学习《各种归一化的区别》
  8. C++类的前向声明的学习
  9. 微信小程序调查报告(二)-账号注册篇
  10. 今日头条架构演进之路
  11. dubbo 数据传输大小配置
  12. 安卓rom制作教程_【ROM消息】Simplicity官改:MIUI11 9.12.14全机型更新
  13. 【数据结构与算法】——一文带你理清线性表的基础(java代码演示)
  14. 牛刀小试imageROI
  15. h5倒计时弹窗_H5活动开始/结束倒计时实现
  16. 关于扫码签到统计信息,一键导出excel表
  17. eclipse的简介
  18. 爬虫实战-链家北京房租数据
  19. Python绘制3D图形:Axes3D
  20. Ubuntu下各种软件的安装和卸载

热门文章

  1. IOS 实现滚动文字
  2. 张亚勤:领导者的3种能力
  3. 关于开源软件的书籍一定要尽量提供搭配好的软件版本
  4. JMeter + influxdb + grafana框架安装
  5. SAP S/4HANA销售订单创建时,会自动触发生产订单的创建
  6. LeetCode 451. Sort Characters By Frequency
  7. 【回文自动机】bzoj3676 [Apio2014]回文串
  8. phpFastCache
  9. 如何找出标有App Store 精华,Essentials的所有软件?
  10. gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架