开闭原则的定义

开闭原则的定义: 一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭.即一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化.

软件实体包括一下部分

  1. 项目或软件产品中按照一定的逻辑规则划分的模块
  2. 抽象和类
  3. 方法

注意: 开闭原则对扩展开放,对修改关闭,并不意味着不做任何修改,底层模块的变更,必然要有高层模块进行耦合,否则就是一个孤立无意义的代码片段

开闭原则的好处

开闭原则是一个最基本的原则,另外五个原则都是开闭原则的具体形态,是指导设计的工具和方法,而开闭原则才是精神领袖.

  1. 开闭原则有利于进行单元测试
  2. 开闭原则可以提高复用性
  3. 开闭原则可以提高可维护性
  4. 面向对象开发的要求

开闭原则的使用

1.抽象约束

  1. 通过接口或抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法
  2. 参数类型、引用对象尽量使用接口或抽象类,而不是实现类
  3. 抽象层尽量保持稳定,一旦确定不允许修改接口或抽象类一旦定义,应立即执行,不能有修改接口的想法,除非是彻底的大返工

2.元数据控制模块行为

元数据: 用来描述环境和数据的数据,通俗的说就是配置参数.

通过扩展一个子类,修改配置文件,完成了业务的变化,也是框架的好处

3.制定项目章程

4.封装变化

对变化的封装包含两层含义:

  1. 将相同的变化封装到一个接口或抽象类中
  2. 将不同的变化封装到不同的接口或抽象类中

不能有两个不同的变化出现在同一个接口或抽象类中.封装变化,找出预计的变化或不稳定的点,为这些变化点创建稳定的接口,准确的讲是封装可能发生的变化.23个设计模式都是从各个不同的角度对变化进行封装的.


  1. 开闭原则也只是一个原则,实现拥抱变化的方法很多,并不局限于这6大设计原则,但是遵循着6大设计原则基本上可以应对大多数变化.
  2. 项目规章非常重要
  3. 预知变化,在实践过程中,一旦发现有发生变化的可能,或者变化曾经发生过,就需要考虑现有的架构是否可以轻松的实现这一变化.

开闭原则是一个终极目标,任何人包括大师级人物都无法百分之百做到,但朝这个方向努力,可以非常显著的改善一个系统的架构,真正做到"拥抱变化".

6大设计原则之开闭原则相关推荐

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

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

  2. Java设计原则之单一职责原则、开闭原则、里氏代换原则

    文章目录 面向对象设计原则概述 单一职责原则 开闭原则 里氏代换原则 面向对象设计原则概述 软件的可维护性(Maintainability)和可复用性(Reusability)是两个非常重要的用于衡量 ...

  3. 设计原则:开闭原则(OCP)

    1.什么是开闭原则 开闭原则的英文是Open Closed Principle,缩写就是OCP.其定义如下: 软件实体(模块.类.方法等)应该"对扩展开放.对修改关闭". 从定义上 ...

  4. 设计模式-02.经典设计原则-第一节-单一职责原则,开闭原则,里式替换,接口隔离【万字长文系列】

    文章目录 设计模式经典设计原则-第一节 单一职责原则(SRP) 如何理解单一职责原则? 如何判断类的职责是否足够单一? 类的职责是否设计得越单一越好? 开闭原则(OCP) 如何理解"对扩展开 ...

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

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

  6. Java面向对象设计原则1——开闭原则

    在我们学习面向对象编程的时候,总会出现一些问题,好比以前刚刚写好的代码,上线测试可以.正常运行,突然有一天说要加一个功能,改完之后,发现以前正常运行的功能不能用了,类似这样的问题有好多好多,为了避免类 ...

  7. 七大设计原则之开闭原则

    一.开闭原则介绍 开闭原则(Open Closed Principle)是编程中最基础,也是最重要的设计原则.编程中遵循其他原则以及使用设计模式的目的就是遵循开闭原则. 一个软件实体如类,模块和函数应 ...

  8. 设计模式六大原则之--开闭原则(OCP)

    设计模式六大原则之--开闭原则(OCP) 前言 1 描述 2 理解: 3 问题由来: 4 使用LoD的好处: 5 难点: 6 最佳实践: 7 范例: 前言 The Open - Closed Prin ...

  9. 关于Java面向对象程序设计原则之一——开闭原则的思考与分享

    整理日期:2022-05-27 目录 一.开闭原则 二.为什么使用开闭原则 三.如何在程序设计中体现开闭原则 一.开闭原则 开闭原则(Open-Closed Principle, OCP)是指一个软件 ...

最新文章

  1. DNS 到底怎么工作的? (How does dns work?)
  2. Excel万年历的制作
  3. 一个程序员的成长的六个阶段(转载)
  4. python能编写手机软件-怎么用Python编写一个手机聊天软件或程序
  5. 【深度学习】查准率、召回率、AP、mAP
  6. 无线路由器——多路由器无线桥联解决方案
  7. 后宫佳丽三千,假如古代皇帝也懂负载均衡算法...
  8. node.js npm常用命令
  9. verilog 生成块_如何高效的编写Verilog——终极版
  10. android 访问服务器sql_一次服务器被传webshell事件溯源
  11. 使用Git版本控制查看文件的更改历史记录
  12. 机器人码垛手持式编程_码垛机器人编程软件图解教程
  13. 身份证前6位数据/行政区划分代码
  14. pdf增强锐化软件_分享一波图像处理软件神器,绝对牛皮!!
  15. Radius认证协议(一)
  16. c语言间接寻址运算符,间接寻址运算符:*
  17. 大学生常用的pt网站
  18. PHP网页输出xml数据
  19. MFC界面编程基础(08):菜单(一)
  20. 从’物质决定意识’说起

热门文章

  1. 2012 夏季高校微软俱乐部活动 - 开门创新
  2. Visual Studio 2010 sp1
  3. python如何改变入参的值_从事数据分析3年后,发现用python入门数据分析这三本书必看!...
  4. JAVA入门级教学之(接口)
  5. 既约分数蓝桥杯c语言,2021蓝桥杯C++第二届省赛
  6. 高级java技术web组件_(重温)JavaWeb--Servlet技术(二)(JavaWeb 的三大组件之一)...
  7. websocket 压力测试_打造最强移动测试平台
  8. 单片机c语言怎样添加自定义头文件,单片机C语言编程与或|头文件常见问题
  9. armbian nginx 部署博客_通过Git将Hexo博客部署到服务器
  10. w7电脑蓝屏怎么解决_怎么解决0x0000007b电脑蓝屏 解决0x0000007b电脑蓝屏方法【详细步骤】...