开-闭原则(OCP - Open-Closed Principle )
来源:互联网 发布:数据库编程技术 编辑:程序博客网 时间:2024/05/16 12:15
软件实体(函数、类、模板等等)应该是可扩展的、但是不可修改的。
可扩展- 增加新的功能。 应对新的功能需求。
不可修改- 不修改源码。避免关联源码的修改、重新编译、链接。
一个软件实体,例如一个函数,怎样才能做到即增加新的功能,又不修改它的源码呢。
答案就是抽象。
先看一个不遵守OCP原则的例子:
client类调用server类实现某些功能。
如果有新的需求,client需要使用另外一种server,那么就要修改client中的对应部分的代码。
并且与client关联的代码,也需要重新链接、或打包等等。
修改为遵守OCP原则: (strategy 策略模式)
此时,client依赖的是一个接口(也可以是一个抽象类),server只是interface的一个具体实现。
面对同样的需求,只需新增新的server实现, 但对client来说,是符合OCP原则的。
遵循OCP也是要付出代价的。创建正确的抽象是要花费时间和精力的,同时也增加了软件的复杂度。
所以我们应当把OCP应用在确实会发生变化的地方, 或者一直等到变化发生时再采取行动。
为了防止软件背着不必要的复杂性,我们应该允许自己犯最初的错误。
这意味我们在最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。
那这就意味着,如果第一次错误来的越早越好。
因此,我们应该去刺激变化的发生。
1、首先编写测试。 让测试去激发变化的发生。
2、使用很短的迭代周期。 让客户和使用人员尽可能快的激发变化。
3、首先开发最重要的特性。
总结:
OCP是面向对象的核心所在。遵循这个原则可带来巨大的好处:灵活性、扩展性、重用性、维护性。
但是,在软件的任何地方都遵循OCP原则而进行抽象同样不是一个好主意,
开发人员应该仅仅对频繁变化的那部分做出抽象。
拒绝不成熟的抽象,和抽象本身一样的重要。
- 开-闭原则(OCP - Open-Closed Principle )
- “开-闭”原则 (Open-Closed principle, OCP)
- “开-闭”原则 (Open-Closed principle, OCP)
- “开-闭”原则 (Open-Closed principle, OCP)
- “开-闭”原则 (Open-Closed principle, OCP)
- OCP(Open-Closed Principle)开放封闭原则
- “开闭原则”(Open-Closed Principle,OCP
- “开-闭”原则(Open-Closed Principle)
- Open-Closed Principle 开-闭原则
- “开-闭”原则(Open-Closed Principle)
- Open-Closed Principle,OCP
- 软件设计原则(一)开闭原则(Open-Closed Principle, OCP)
- 第九章 OCP:The Open-Closed Principle(开闭原则)
- 开闭原则(Open-Closed Principle,或者OCP)
- 开放-封闭原则(OCP:The Open-Closed Principle)
- The Open-Closed Principle (OCP) - OO设计的开闭原则
- 开放封闭原则(OCP,Open Closed Principle)
- 类之OCP(Open Closed Principle):开闭原则
- JAVA常用设计模式(3)观察者模式
- Qt::FocusPolicy的使用
- UIAlertController
- JavaScript之对数组中元素进行增删改
- 逻辑回归及梯度下降
- 开-闭原则(OCP - Open-Closed Principle )
- DTO(数据传输对象)
- Android SystemProperties设置/取得系统属性的用法总结
- Ajax-Ajax基础实例
- H5获取地理位置
- Linux下挂载与解除挂载U盘
- bzoj 3998 [TJOI2015]弦论 后缀数组||后缀自动机
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- UILabel实现剪贴板功能,UIPasteboard、UIMenuController