LSP原则(Liskov替换原则)
OCP是OOD中很多说法的核心。如果这个原则应用的有效,应用程序就会具有更多的可维护性、可重用性以及健壮性。LSP是使OCP成为可能的主要原则之一。正是子类型的可替换性才使得使用基类类型的模块在无需修改的情况下就可以扩展。这种可替换性必须是开发人员可以隐式依赖的东西。
LSP定义:子类型(subtype)必须能够替换掉他们的基类型(base type)
LSP让我们得出一个非常重要的结论:一个模型,如果孤立的看,并不具有真正意义上的有效性,模型的有效性只有通过它的客户程序来实现。在考虑一个特定设计是否恰当时,不能完全孤立的看这个解决方案。必须要根据设计的使用者所做出的合理假设来审视它。
那么怎样才能做出合理的假设呢,有一项技术可以使这些合理的假设明确化,从而支持LSP,这项技术被称为基于契约设计(OBC)。契约是通过为每个方法声明的前置条件和后置条件来指定的。要使一个方法得以执行,前置条件必须要为真。执行完毕后,该方法要保证后置条件为真。
DIP:依赖倒置原则
定义:
a.高层模块不应该依赖于低层模块。二者都应该依赖于抽象
b.抽象不应该依赖于细节。细节应该依赖于抽象
解释:依赖抽象。程序中的所有依赖关系都应终止于抽象或者接口
高层策略:是应用背后的抽象,是那些不随具体细节的改变而改变的真理。它是系统内部的系统。
ISP:接口隔离原则
使用场景:这个原则用来处理胖接口所具有的缺点。
定义:不应该强迫客户依赖于它们不用的方法。