开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统。

定义:

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

Softeware entities like classes,modules and functions should be open for extension but closed for modifications.

开闭原则的含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有代码来实现变化。

软件实体包括以下几个部分:

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

开闭原则是为软件实体的未来事物而制定的对现行开发设计进行约束的一个原则。

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

变化的类型:

  • 逻辑变化
  • 子模块变化
  • 可见试图变化

一个项目的基本路径应该是这样的:项目开发、重构、测试、投产、运维,其中的重构可以对原有的设计和代码进行修改,运维尽量减少对原有代码修改,保持历史代码的纯洁性,提高系统的稳定性。

开闭原则的重要性:

  • 开闭原则对测试的影响

开闭原则可是保持原有的测试代码仍然能够正常运行,我们只需要对扩展的代码进行测试就可以了。

  • 开闭原则可以提高复用性

在面向对象的设计中,所有的逻辑都是从原子逻辑组合而来的,而不是在一个类中独立实现一个业务逻辑。只有这样代码才可以复用,粒度越小,被复用的可能性就越大。

  • 开闭原则可以提高可维护性
  • 面向对象开发的要求

如何使用开闭原则:

  • 抽象约束

第一,通过接口或者抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法;

第二,参数类型、引用对象尽量使用接口或者抽象类,而不是实现类;

第三,抽象层尽量保持稳定,一旦确定即不允许修改。

  • 元数据(metadata)控制模块行为

元数据就是用来描述环境和数据的数据,通俗地说就是配置参数,参数可以从文件中获得,也可以从数据库中获得。

Spring容器就是一个典型的元数据控制模块行为的例子,其中达到极致的就是控制反转(Inversion of Control)

  • 制定项目章程

在一个团队中,建立项目章程是非常重要的,因为章程中指定了所有人员都必须遵守的约定,对项目来说,约定优于配置。

  • 封装变化

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

第一,将相同的变化封装到一个接口或者抽象类中;

第二,将不同的变化封装到不同的接口或抽象类中,不应该有两个不同的变化出现在同一个接口或抽象类中。

转载于:https://www.cnblogs.com/fengting/p/4622220.html

设计模式六大原则-OCP相关推荐

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

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

  2. 设计模式六大原则(SOLID)

    设计模式六大原则(SOLID) Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substitutio ...

  3. 真的很干!这篇4万字超长干货把“设计模式六大原则”解析透了!建议反复阅读。

    今天整理更新一篇关于设计模式六大原则的文章,主要是学习路径类的. 以后会找机会再更面试类的文章.所以,点关注,不迷路,可以最先看到我的更新呦! 壹 | 超 级 干 货 一.单一职责原则 1.定义 首先 ...

  4. PHP 设计模式六大原则

    http://www.cnblogs.com/yujon/p/5536118.html 设计模式六大原则(1):单一职责原则 不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责 设计模 ...

  5. Java 设计模式六大原则

    Java 设计模式六大原则 单一职责原则 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而 ...

  6. 快速理解设计模式六大原则

    设计模式的核心总结起来就一句话:用抽象构建框架,用实现扩展细节.目的就是代码修改的改动量最小 设计模式六大原则 单一职责原则 很好理解,一个类职责要单一,不要承载过多的职责,就比如说我们电脑上所有的文 ...

  7. 子慕谈设计模式系列(二)——设计模式六大原则

    六大原则 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则 开闭原则 前言 设计模式不容易用文字描述清楚,而过多的代码,看起来也让人摸不到头脑,加上词语或者文字描述的抽象感,很容易让 ...

  8. 设计模式六大原则——合成/聚合复用原则(CARP)

    1.定义 简而言之,对于合成/聚合复用原则的定义就是:要尽量使用合成和聚合,尽量不要使用继承. 2.释义 为什么"要尽量使用合成和聚合,尽量不要使用继承"呢? 这是因为: 第一,继 ...

  9. 五分钟了解设计模式六大原则(上)

    目录 简介 设计模式是什么? 设计模式六大原则是什么? 设计模式有哪些? 单一职责原则(Single Responsibility Principle) 我们应该如何使用单一职责呢? 里氏替换原则(L ...

  10. 设计模式六大原则之里氏替换原则、依赖倒置原则详解

    设计模式六大原则--里氏替换原则.依赖倒置原则详解 1.里氏代换原则(Liskov Substitution Principle) 概念 顾名思义,该原则用于经常发生替换的地方,在Java中指的是实现 ...

最新文章

  1. POJ 3320 Jessica's Reading Problem (尺取)
  2. cpython 标准库_Python re标准库
  3. uc浏览器将在印度推出电商服务
  4. HTML5边玩边学(9):俄罗斯方块就是这么简单 之 数据模型篇
  5. 安装scrapy框架报错是常见问题
  6. 【Linux系列】Linux基础知识整理
  7. SpringBoot官方提供的starter pom
  8. 登录oracle sql,登录 Oracle SQL Developer
  9. java 获取文章关键词_在文章中获取关键字
  10. 我悲惨的人生,该死的UPX壳,谁能救救我
  11. 安卓recovery流程分析【第二篇】
  12. 推荐6款珍藏已久的网盘搜索工具
  13. 暑假多看看英文原版电影
  14. 爬虫实战教程:采集微信公众号文章
  15. 平安科技Java后台开发面试
  16. Java实验报告之java面向对象编程
  17. 关于Gradle新版插件依赖方式
  18. linux视频应用程序开发,Linux平台音视频开发和音视频SDK应用
  19. Mac 卸载 隐蔽软件 Core_Sync 的步骤
  20. 好用计算机,六款让你电脑更好用的软件

热门文章

  1. 接入TapTap防沉迷系统的逻辑图
  2. 设计模式---责任链模式(C++实现)
  3. JVM学习01—下载编译openjdk源码并进行调试
  4. 学习单片机入门需要准备什么?
  5. python3 socket sendall_全网最详细python中socket套接字send与sendall的区别
  6. 【渝粤教育】国家开放大学2019年春季 0692-22T化工设备机械基础 参考试题
  7. 【渝粤教育】国家开放大学2018年春季 7406-22T金融统计分析 参考试题
  8. python题目训练(随时更新)
  9. mybatis动态传入表名、列名
  10. 函数 迭代器,生成器