转载自 面象对象设计6大原则之二:开放封闭原则

开放封闭原则(OCP),The Open Closed Principle

定义

一个软件的实体,包括类、方法、模块、应该对扩展开放,对修改关闭。

也就是说一个软件的实体应该通过扩展的方式来修改变化,而不是修改已有实体源代码。

开放封闭原则也是最基本需要遵守的原则,我们应该尽量保证系统的稳定性,我们在实现另外一个功能的时候不能修改之前已有的代码以免造成之前的功能出现BUG,带来不必要的麻烦,所以开放封闭原则正是引导我们去设计一个稳定、方便扩展的系统。

在实际应用中我们一般会有以下几种做法保证开放封闭原则:

1、抽象出一个接口或者抽象类,定义公共的方法,达到扩展的目的。

2、参数类型和引用类型使用接口或者抽象类,不能依赖实现类。

3、接口和抽象类不能修改,可以使用继承接口或者抽象父类的形式达到扩展的目的。

这些应用看起来也并不复杂,无非是合理地定义接口和抽象类,不同的业务功能采用不同的实现类达到扩展,像设计模式中的策略模式、模板方式模式等都是开放封闭的原则。

总结一下,开放封闭原则具有以下几个优点:

1、方便扩展,提高了可维护性。

2、不影响已有功能,提高了系统稳定性和减少了重复测试。

3、扩展之前的逻辑,提高了代码复用性。

面象对象设计6大原则之二:开放封闭原则相关推荐

  1. 面象对象设计6大原则之六:迪米特原则

    转载自 面象对象设计6大原则之六:迪米特原则 迪米特原则(LOD),The Law Of Demeter,也称为最少知识原则 定义 一个对象应该对其他对象有最少的了解. 也就是说一个类耦合和调用一个类 ...

  2. 面象对象设计6大原则之五:依赖倒置原则

    转载自 面象对象设计6大原则之五:依赖倒置原则 依赖倒置原则(DIP),The Dependency Inversion Principle 定义 1.高层模块不应该依赖低层模块,两都应该依赖于抽象. ...

  3. 面象对象设计6大原则之四:接口隔离原则

    转载自 面象对象设计6大原则之四:接口隔离原则 接口隔离原则(ISP),The Interface Segregation Principle 定义 客户端不需要强迫依赖那些它们不需要的接口. 类与接 ...

  4. 面象对象设计6大原则之三:里氏替换原则

    转载自 面象对象设计6大原则之三:里氏替换原则 里氏替换原则(LSP),The Liskov Substitution Principle 定义 所有引用基类的地方必须能透明地引用其子类的对象,即子类 ...

  5. 面象对象设计6大原则之一:单一职责原则

    转载自 面象对象设计6大原则之一:单一职责原则 单一职责原则(SRP),The Single Responsibility Principle 定义 一个类的修改只能有一个被修改的原因. 通俗地讲,就 ...

  6. 设计原则之一:开放封闭原则

    1:什么是开放封闭原则 开放封闭原则(Open-Closed Principle):一个软件实体应当对扩展开放(open),则修改关闭(不修改原来的代码这就是closed).在设计一个模块时,应当使得 ...

  7. 设计模式原则之:开放封闭原则

    上一篇文章,我们讲了一个最基础的设计原则:单一职责原则.这一讲,我们来看下一个设计原则:开放封闭原则. 作为一名程序员,来了一个需求就要改一次代码,这种方式我们已经见怪不怪了,甚至已经变成了一种下意识 ...

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

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

  9. 设计模式 学习笔记(2)单一职责原则、开放封闭原则、依赖倒转原则

    (3)单一职责原则 单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因.例如,我们在写一个窗体应用程序,一般都会生成一个Form这样的类,于是我们就把各种各样的代码,像算法.数据库访问 ...

最新文章

  1. 区块链学堂:区块链引子
  2. java socket 重连复用,20190818 On Java8 第八章 复用
  3. AdaBoost基本原理
  4. 铁乐学Python_day12_作业
  5. 给初学者们讲解人工神经网络(ANN)
  6. C语言 | 函数指针、指针函数、数组指针、指针数组
  7. linux和windows启动,Linux和Windows双系统的启动
  8. Nginx 过滤模块
  9. Python 解决面试题47 不用加减乘除做加法
  10. 数据库mysql,oracle,sqlite,mariadb 相关收藏
  11. C# HttpServer 框架
  12. Linux下sopcast
  13. 蔡义江《红楼梦诗词曲赋评注》下
  14. 怎样让自己变得更优秀?职场精英是如何炼成的?怎样成为行业精英
  15. rabbitmq——交换机fanout和direct
  16. QTextToSpeech 文本转语音输出
  17. Linux技巧:使用Fsck命令修复损坏的分区
  18. Ant Mobile使用整理
  19. win11断网自动重启
  20. UCOSii和Linux的区别和联系

热门文章

  1. [MyBatisPlus]MyBatisX插件
  2. [蓝桥杯2015决赛]胡同门牌号-模拟+枚举
  3. 贵州大学计算机专业的导师是谁,贵州大学计算机科学与信息学院导师介绍:王以松...
  4. 递归算法(三)- 回溯法Backtracking
  5. 2 未匹配到任何借口_拼多多【关键词精确匹配溢价】给你想要的精准流量,让你订单暴增的秘诀...
  6. 2016-2017 Central Europe Regional Contest Hangar Hurdles 克鲁斯卡尔重构树 + 建图
  7. P4127 [AHOI2009]同类分布 数位dp + 对状态剪枝
  8. Codeforces Round #631 (Div. 2) C. Dreamoon Likes Coloring 构造
  9. P4548 [CTSC2006]歌唱王国
  10. cf1491C. Pekora and Trampoline