Bertrand Meyer在1988年提出的,其概念如下:
软件实体(类、模块、函数等)应该是可以扩展的,但对修改是关闭的(不可修改的)。也就是说,一个实体允许被扩展,而无需修改其源代码。
如果程序中的一处改动就会产生连锁反应,导致一系列相关模块的改动,那么设计就具有僵化性的坏味道。而OCP的好处:
- 具有弹性可以应对改变;
- 可以接受新的功能(添加新的代码)来应对改变(新增)的需求。
OCP两个主要的特征:
- 对于扩展是开放的:可以改变模块的功能以适应需求的改变,通过模块的扩展实现
- 对于更改是封闭的:对模块进行扩展时,不必更改模块的源代码或二进制代码
如何实现呢,关键就是对程序中频繁变化的那些部分做出抽象,其他的行为可以是其扩展类。
OCP的主要目标是让系统易于扩展,同事限制其每次被修改所影响的范围。实现方式:
- 通过将系统划分为一系列组件;
- 将这些组件间的依赖关系按照层次结构进行组织
达到的效果:让高阶组件不会因低阶组件被修改而受到影响。
- https://en.wikipedia.org/wiki/Open%E2%80%93closed_principle
- 《架构整洁之道》
- 《Head First 设计模式》