1 英文名字
dependence inversion principle
2 本质
上层模块不直接依赖于下层模块,而是上下层模块都依赖于抽象接口。上层模块中保存抽象接口的引用,而下层模块实现该抽象接口。
原理图如下:
原来的依赖关系,上层模块依次依赖下层模块
新的依赖关系,上下层模块都依赖于抽象接口
这里的依赖应该从头文件的角度来理解,或者从import的角度来理解,比如上层模块中要保存抽象接口的引用,因此上层模块需要
import抽象接口,而下层模块需要实现抽象接口,它也需要import该抽象接口,所以说,上下层模块都依赖于抽象接口。
3 倒置的来历
如果设计上不使用这个依赖倒置原则的话,那么依赖关系就是figure 1所示了。
使用了之后,一般会把抽象接口和上层模块放在一个包中,因为抽象接口可能有多个下层实现,放在任何一个下层模块
的包里面都是不合适的。
这样的话,下层模块反过来要依赖于上层模块所在的包了。所以,就叫做依赖倒置。