浅析设计模式-依赖倒置原则
依赖倒置原则的英文名称是 Dependence Inversion Principle,简称DIP
定义
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.
翻译过来,包含三层含义:
- 高层模块不应依赖于底层模块,两者都应该依赖其抽象
- 抽象不应该依赖于细节
- 细节应该依赖抽象
高层模块和底层模块容易理解,每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是底层模块,原子逻辑的再组装就是高层模块。那么什么是抽象?什么又是细节?在Java语言中,抽象指接口或抽象类,不能直接被实例化的。细节就是实现类,可以被直接实例化。依赖倒置原则在Java语言中的表现就是:
- 模块间的依赖通过抽象发生,实现类直接不发生直接的依赖关系。
- 接口或抽象不依赖于实现类
- 实现类依赖接口或抽象类
简而言之就是面向接口编程。
最佳实践
- 每个类尽量都有接口或抽象类,或者抽象类和接口都具备
- 变量的表面类型尽量是接口或者是抽象类
- 任何类都不应该从具体类派生
- 尽量不要复写基类的方法
- 结合里氏替换原则使用