定义:High Level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details.Details should depend upon abstractions.
定义的含义:
a. 高层模块不应依赖低层模块,两者应都依赖其抽象
b. 抽象不应依赖细节
c. 细节应依赖抽象
(细节即实现类,抽象即接口或抽象类)
在Java中的表现:
a. 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的
b. 接口或抽象类不依赖于实现类
c. 实现类依赖接口或抽象类
用更加精简的定义就是:面向接口编程——OOD(Object-Oriented-Design, 面向对象设计)的精髓之一。
下面,我们通过反证法来证明:
论题:依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高嗲吗的可读性和可维护性。
反论题:不使用依赖倒置原则也可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。
eg:
司机驾驶奔驰车:
司机类:
publicclassDriver{publicvoiddriver(Benzbenz){benz.run();}}
奔驰类:
publicclassBenz{publicvoidrun(){System.out.printIn("奔驰运行");}}
场景类:
publicclassClient{publicstaticvoidmain(String[]args){DriverzhangSan=newDriver();Benzbenz=newBenz();zhangSan.driver(benz);}}
Now 张三要开宝马怎么办???
首先 我们需要产生一个宝马类(代码略:类似奔驰类)
但是!张三却无法开,因为没有对应的方法
我们的设计出现了问题:司机类与奔驰类是紧耦合关系,导致可维护性降低,可读性降低(阅