第4章 “开-闭原则”(ocp) (笔记)

开闭原则指的是一个软件实体应该对扩展开放,对修改关闭。
Software entities should be open for extension,but closed for modification.
满足“开-闭原则”的设计可以给软件体统2个无可比拟的优越性
1、通过扩展已有的软件系统,可以提供新的行为,以满足软件的新需求,是变化中的软件系统有一定的适应性和灵活性。
2、已有的软件模块,特别是最重要的抽象层模块不能修改,这就使变化中的软件系统有一定的稳定性和延续性。
对可变性的封装原则
(1)可变性不应散落到代码的不同角落里,而应该封装到一个对象里。同一可变性的不同表现意味同一继承等级结构中的具体子类。 继承应该看做是封装变化的方法
(2)一种可变不应与另一种可变混在一起,类图的继承关系一般不会超过两层,如超过意味着两种不同的可变性混合到了一起。
与其他设计原则的关系
1、里氏代换原则
里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。一般而言,违反里氏代换原则的,也违背“开-闭”原则,反过来并不一定成立。
2、依赖倒转原则
要依赖于抽象,不要依赖于实现。
“开-闭”原则是目标,而达到这一目标的手段是依赖倒转原则。换言之,要想实现“开-闭”原则,就应当坚持依赖倒转原则。违反依赖倒转原则,就不可能达到“开-闭”原则的要求。
3、合成/聚合复用原则
要尽量使用合成/聚合,而不是继承关系达到复用的目的。遵守合成/聚合原则是实现“开-闭”原则的必要条件;违反这一原则就无法使系统实现“开-闭”原则这一目标。
4、迪米特法则
一个软件实体应当与尽可能少的其他实体发生相互作用。
5、接口隔离原则
应当为客户端提供尽可能小的单独的接口,而不是提供大的总接口。
显然,接口隔离原则与广义的迪米特法则都是对一个软件实体与其他的软件实体的通信的限制。广义的迪米特法则要求近可能限制通信的宽度和深度。接口隔离原则索要限制的是通信的宽度,也就是说,通信应当尽可能地窄。



你可能感兴趣的:(OCP)