实现“开-闭”原则的关键是抽象化,并且从抽象化导出具体化实现。如果说“开-闭”原则是面向对象设计的目标,依赖原则就是面向对象设计的主要机制。
依赖倒转原则讲的是:要依赖于抽象,不要依赖于具体。
1.为何而“倒转”
为什么要使用“倒转”一词,依赖倒转(Dependence Inversion)的意义是什么?
简单地说,传统的过程性系统的设计方法倾向于高层模块依赖于底层模块:抽象层依赖于具体层。倒转原则是要这个错误的依赖关系倒转过来,这就是“依赖倒转原则”的由来。
2.复用与可维护性的“倒转”
“倒转”一词则是指复用应当将复用的重点放在抽象层次上。
3.依赖倒转原则
在面向对象的系统里,两个类之间可以发生三种不同的耦合关系:
零耦合(Nil Coupling)关系:如果两个类没有耦合关系,就称之为零耦合。
具体耦合(Concrete Coupling)关系:具体性耦合发生在两个具体(可实例化的)类之间,经由一个类对另一个具体类的直接引用造成。
抽象耦合(Abstract Coupling)关系:抽象耦合关系发生在一个具体类和一个抽象类(或者Java接口)之间,使两个必须发生关系的类之间存有最大的灵活性。