☆ 依赖倒转原则,要依赖于抽象,而不要依赖于具体实现。
ξ 8.3 依赖倒转原则
☆ 三种耦合关系
① 零耦合关系,如果两个类没有耦合关系,就称之为零耦合;
② 具体耦合,具体耦合发生在两个具体的类之间,经由一个类对另外一个具体类的直接引用造成的。
③ 抽象耦合关系,抽象耦合关系发生在一个具体类和一个抽象类之间,使用两个必须发生关系的类之间存在有最大的灵活性。
☆ 依赖倒转原则的另外一种表述是:
要针对接口编程,不要针对实现编程(Program to an interface, not an implementation)[GOF95]。同样,在处理类之间的耦合关系时,尽量使用抽象耦合的形式。
下图中左侧A和B为具体依赖关系,重构后如右图所示,变为抽象依赖:
☆ 里氏替换原则是依赖倒转原则的基础。
☆ 工厂模式、模板模式、迭代子模式都是对依赖倒转原则的体现。
ξ 8.5 Java对抽象类型的支持
☆ 在设计中,常用的抽象方式为:先抽象出逻辑上固定的东西,定义出接口,再定义一个抽象类实现该接口,作为该接口默认实现的抽象类应该实现大部分公共的代码,具体的类通常由该抽象类派生。
下图以java下的容器举例说明: