声明:本文为阅读秦小波所写的《设计模式之禅》所写小结,文章内容可能有部分引述此书。

开闭原则(Open Closed Principle):对扩展开放,对修改关闭

1、定义:

   软件实体应该通过扩展子类来实现变化,而不是通过修改已有代码实现变化。

软件实体包括以下部分:

   软件或软件产品按照一定逻辑规则划分的模块;
   抽象和类;
   方法。

变化的分类:

   1) 逻辑的变化:只变化一个逻辑,而不涉及其他模块;
      此时可以修改原有类中的方法,前提是所有依赖和关联类都按照相同的逻辑处理。
   2) 子模块的变化:一个低层次的模块变化必然引起高层次的模块变化,因此高层次的模块的修改是必然的。
   3) 可见视图变化:可见视图是提供给客户使用的界面。

一般项目基本思路:项目开发、重构、测试、投产、运维
   其中,重构是对原有设计和代码进行修改;
      运维一般都会减少对原有代码的修改。

2、为什么要采用开闭原则:开闭原则是前五大原则的抽象,前五大原则是其具体实现;

   1)降低了测试的成本:减少了测试方法的修改,避免了原有测试流程;
   2)提高了复用性:缩小了逻辑力度,直到不能再拆分;
   3)提高了可维护性:扩展类比修改类容易;
   4)面向对象的开发要求:将“可能”留下接口,等待“可能”转变为“现实”。

3、如何使用开闭原则?

   1、抽象约束:通过接口或抽象类可以约束一组可能变化的行为,并且能够实现对扩展开放;
     1) 通过接口或抽象类约束扩展,对扩展进行边界限定,不允许出现接口或抽象类中不存在的public方法;
     2) 参数类型、引用对象尽量使用接口或者抽象类,而不是实现类;
     3) 抽象层尽量保持稳定,一旦确定即不允许修改。
   2、元数据(metadata)控制模块行为:
     元数据:配置参数
     通过扩展一个子类,修改配置文件,完成业务变化。 --- 框架
   3、制定项目章程:约定优于配置;
   4、封装可能发生变化:将相同的变化封装到一个接口或者抽象类中;将不同的变化封装到不同的接口或者抽象类中。

小结:开闭原则也只是一个原则,应对需求的变化,我们需要做好应对变化的准备。学会预知变化,从而拥抱变化。

注:本文大多数内容基本从《设计模式之禅中》摘录,也有小部分自己的理解,如果有误欢迎大家批评指正。如有问题,也欢迎大家积极留言探讨。

设计模式之禅之开闭原则相关推荐

  1. 学习设计模式 - 六大基本原则之开闭原则

    设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Princ ...

  2. 大话设计模式 第四章 开闭原则 优惠券

    定义 对扩展开放 对修改关闭 多态走起 里式替换约束 问题 每天早上小红去买早餐 早餐20元钱 老板每天给了它张优惠券 优惠券可以当天用 小红要付多少钱 上来就直接干 第一天 老板给了她张1元优惠券 ...

  3. [设计原则] 六大设计原则之“开闭原则”

    [设计原则] 六大设计原则之"开闭原则" 目录 [设计原则] 六大设计原则之"开闭原则" 什么是开闭原则 为什么使用开闭原则 如何使用开闭原则 注意事项 总结 ...

  4. 设计模式六大原则(6)——开闭原则

    定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来:在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会在旧代码中引入错误,也可能会使我们不得不对整 ...

  5. 设计模式中的开闭原则

    Table of Contents 1 设计模式中的开闭原则 1.1 基本原则 2 模式中的开-闭原则 2.1 策略模式 2.2 简单工厂 2.3 工厂方法 2.4 抽象工厂 2.5 建造者模式 2. ...

  6. 【设计模式】开闭原则

    开闭原则 开闭原则是编程中最基础.最重要的设计原则 一个软件实体如类,模块和函数应该对扩展开放**(对提供方),对修改关闭(对使用方)**.用抽象构建框架,用实
现扩展细节. 当软件需要变化时,尽量通 ...

  7. 设计模式-软件架构设计七大原则及开闭原则详解

    前言 在日常工作中,我们使用Java语言进行业务开发的时候,或多或少的都会涉及到设计模式,而运用好设计模式对于我而言,又是一个比较大的难题.为了解决.克服这个难题,Remi酱特别开了这个博客来记录自己 ...

  8. 深入浅出设计模式原则之开闭原则(OCP)

    下面以两个例子来解释开闭原则(程序代码) [按例1]Windows 的桌面主题设计 分析:Windows 的主题是桌面背景图片.窗口颜色和声音等元素的组合.用户可以根据自己的喜爱更换自己的桌面主题,也 ...

  9. 设计模式的七大设计原则:其五:开闭原则

    开闭原则: 基本介绍: 1.开闭原则(Open Closed Principle)是编程中最基础,最重要的原则. 2.一个软件实体如类,模块和函数应该对扩展开饭,对修改关闭.用抽象构建框架,用实现扩展 ...

最新文章

  1. mysql存储过程导出_Mysql导出存储过程
  2. 如何解决在数据显示的时候,页面出现null的情况
  3. 使用vb获取网页源文件并保存的简单代码
  4. unity3d与eclipse协同工作环境
  5. Call to undefined function Workerman\posix_getpid
  6. linux 卸载 flash,使用率下降到8%,Chrome 87将完全移除Flash
  7. Docker:集装箱式“运输”在软件上的实现
  8. 静态链接库与动态链接库的区别
  9. php 504网关,504 gateway timeout什么意思
  10. ddmmyy日期格式是多少_如何在Excel 2013/2016/2019中将mmddyyyy文本转换为普通日期格式...
  11. Android源码编译FFmpeg4.0.2单独so库for Android(验证可用)
  12. 开源ext2read代码走读之-扩展分区与逻辑分区说明及如何读取扩展分区的分区表(EBR)
  13. win7没有显示wifi连接到服务器,Win7笔记本电脑搜不到无线网络(Wifi)怎么办?...
  14. MR:二:什么是MR混合现实技术?
  15. 3年试点即将到期,电子印章将成网络货运新动力
  16. TortoiseGit文件夹及文件图标不显示解决方法
  17. cgb2110-day02
  18. WebSocket - 一篇文章读懂websocket
  19. 关于如何理解Glibc堆管理器(Ⅹ——完结、补充、注释——Arena、heap_info、malloc_*)
  20. UE4_如何在UI中设置动态图片

热门文章

  1. 精美的android ui框架,Android酷炫实用的开源框架(UI框架)
  2. vscode 新版eslint自动修复_vscode自动修复eslint规范的插件及配置
  3. 概论_第3章_正态分布的重要结论__正态分布与标准正态分布关系
  4. 微积分教材新概念 手机版教材美名传
  5. asp.net 中的gridview 之gridview 分页
  6. 基于Hadoop搭建HA集群网盘系统
  7. 自动同步vps服务器或本地文件的数据到百度网盘
  8. 切片和切块 钻取 旋转(转)
  9. 神奇密码锁(BFS)
  10. 网易云信(音视频sdk)一面凉经