concept
Software entities (classes, modules, functions) should be open for extension but closed for modification
软件实体(包括类、模块、功能等)应该对扩展开放,但是对修改关闭()
analyse
- 相对于其他的几种设计原则来讲,开闭原则的思想就像一个纲领【用抽象构建框架,用实现扩展细节】,其他几大原则更像在这个纲领的之上进行拓展
- 在设计一个模块的时候,应对使这个模块可以在【不被修改】的前提下被扩展,换言之,应对可以【不必修改源代码】的情况下【改变这个模块的行为】。
- 利用接口或抽象类抽象出系统的抽象层,抽象层不变,利用实现层进行扩展;
- 对可变性的封装,将可变的元素封装起来,防止改变扩散到整个应用;
- 继承是用来封装可变性的,一般的继承层次不要超过两层;
- 注意控制封装的粒度,不要将两种可变性封装到一起;