概念:

1) 开闭原则(Open Closed Principle)是编程中最基础、最重要的设计原则

2) 一个软件实体如类,模块和函数应该对扩展开放(对提供方)对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。

3) 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

4) 编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则。

理解:

对扩展开放(对提供方):方法提供方是可以扩展的

对修改关闭(对使用方):方法使用方是不需要修改的。

综合:当方法提供方扩展了一个新的方法后,方法使用方无需修改代码即可。

实例:

实例请移步到23种设计模式-依赖倒原则

以下代码和依赖倒转原则的代码是一样的。。。

依赖倒转原则也遵循了开闭原则。

如果我们要扩展成动物吃东西怎么办?那么这三个类都需要改,新增一个动物类,新增一个动物吃饭的方法,新增调用。那么这就违背了开闭原则。

改进:

1、将吃的动作提取出来,作为一个接口

2、谁吃,让谁去实现这个接口,具体的动作交给实现类

这里可以看出,如果新增一个狗狗吃东西的类,只需要实现Inversion接口的eat的方法(方法提供方),而Eat类的eat方法不需要改变(方法使用方),这样就是遵循了开闭原则。

小结:

1、开闭原则是编程中最基础、最重要的设计原则

2、方法或者函数,要对扩展开放(对提供方),对修改关闭(对使用方)

23种设计模式-开闭原则相关推荐

  1. 实践GoF的23种设计模式:SOLID原则(上)

    本文分享自华为云社区<实践GoF的23种设计模式:SOLID原则(上)>,作者:元闰子. 前言 从1995年GoF提出23种设计模式到现在,25年过去了,设计模式依旧是软件领域的热门话题. ...

  2. 神了!有人用一个项目把23种设计模式与六大原则融会贯通了

    前言 设计模式分为三类,创建型,结构型和行为型.创建型比较好理解,它抽象了实例化过程,将系统与实例的创建解耦.实例由专门的工厂来创建,从而使系统针对实例的抽象接口编程,不依赖任何具体的实现.结构型和行 ...

  3. 设计模式-开闭原则(6)

    设计原则 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则 开闭原则 开闭原则 开闭原则是Java世界里最基础的设计原则, 它指导我们如何建立一个稳定的. 灵活的系统, 先来看开闭原 ...

  4. Java设计模式-开闭原则

    总原则:开闭原则(Open Close Principle)   定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭.   问题由来:在软件的生命周期内,因为变化.升级和维护等原因需要对软件 ...

  5. Java 23种设计模式案例:原则及分类

    2019独角兽企业重金招聘Python工程师标准>>> 一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模 ...

  6. 图解Java设计模式-开闭原则

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

  7. Java设计模式——开闭原则(实例)

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

  8. 设计模式---开闭原则

    开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则.开闭原则由Bertrand  Meyer于1988年提出,其定义如下: 开闭原则(Open-Closed Principle, ...

  9. [设计模式]开闭原则

    开闭原则: 对扩展开放,对修改关闭. 增加功能是提过增加代码来实现的,而不是去修改源代码. 代码如下: #include <iostream> #include <string> ...

最新文章

  1. BZOJ 4584 [Apio2016]赛艇
  2. 关于idea打开项目没有目录
  3. 前端开发-热更新原理解读
  4. 服务器内存型号与频率,一张图看懂如何选择DDR4内存的频率和容量
  5. Python3与OpenCV3.3 图像处理(五)--图像运算
  6. BigDecimal.divide方法
  7. 贪吃蛇html游戏代码
  8. 4G标准LTE FDD与LTE TDD的不同
  9. 【七日阅书】1.注重实效《程序员修炼之道—从小工到专家》
  10. java 写代码求导_OO_JAVA_表达式求导
  11. excel冻结窗格线的设置问题
  12. zencart php5.6环境,BlueHost主机一键安装ZenCart图文教程
  13. Codeforces 136A Presents
  14. Miracast协议
  15. 任何人都有值得学习的地方,横瓜向[水牛党](4618415)请教问题
  16. arduino笔记20:红外遥控
  17. 亿图图示---信息图和数据库模型图
  18. 饭局上领导递给你两根烟怎么做(懂得礼数领导赏识重用)
  19. 5G的五项核心技术和5.5G相关的技术
  20. 数值分析-秦九韶算法

热门文章

  1. 清华陈文光教授:AI 超算基准测试的最新探索和实践。道翰天琼认知智能平台为您揭秘新一代人工智能。
  2. 【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器:DirectInput专场
  3. ni visa pci_基于PCI接口的板卡式数字称重仪表 - 工业自动化称重仪表
  4. 拱猪计分问题(细心题)
  5. 全球及中国无线储罐计量器行业产销前景及运营动态研究报告2021-2027年版
  6. Office Communicator 2007 with Polycom
  7. 官方源、镜像源汇总--持续更新中
  8. MySQL删除小写记录
  9. CSS 垂直居中、多列布局
  10. noise92噪声数据集官方下载地址