Dependence Inversion Principle,DIP"依赖倒置原则",依赖倒置的原始定义是:
Hign level modules should not depend upon low modules.Both should depend upon abstractions.Abstractions should not depend upon details.Details should depend upon abstractions.
翻译过来,包含三层含义:
1.高层模块不应该依赖底层模块,两者都应该依赖其抽象;
2.抽象不应该依赖细节;
3.细节应该依赖抽象;
用JAVA语言来解释下上面的表述:
高层模块依赖低层模块:高层模块需要调用底层模块的方法;
高层模块依赖抽象层:高层模块基于抽象层编程;
低层模块依赖抽象层:低层模块继承或者实现抽象层;
细节:实现接口或者继承抽象类而产生的类;
模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或者抽象类产生的;接口或者抽象类不依赖于实现类;实现类依赖接口或者抽象类,核心思想是面向接口编程;
采用依赖倒置原则可以减少类之间的耦合性,提高系统的稳定性;
举个例子:
对象的依赖关系有三种方式来传递:
1.接口注入:接口声明依赖对象
2.构造函数注入:构造函数传递依赖对象
3.Setter依赖注入:设置Setter方法声明依赖
最佳实践
依赖倒置原则的本质就是通过抽象(接口或抽象类)使各个类或模块彼此独立,不互相影响,实现模块间的松耦合,我们在项目中应该尽量做到:
1.每个类尽量都有接口或者抽象类,或者抽象类和接口两者都具备;
2.变量的表面类型尽量是接口或者抽象类;
3.任何类都不应该从具体派生;