1.8 KiB
1.8 KiB
Dependence Inversion Principle
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.
-
高层模块不应该依赖底层模块, 两者都应该依赖其抽象
-
抽象不应该依赖细节
-
细节应该依赖抽象
-
模块之间的依赖通过抽象发生, 实现类之间不发生直接的依赖关系, 其依赖关系是通过接口或抽象类产生的
-
接口或抽象类不依赖于实现类
-
实现类依赖接口或抽象类
面向接口编程 OOD
采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性
设计是否具备稳定性,只要适当地“松松土”,观察“设计的蓝图”是否还可以茁壮地成长就可以得出结论,稳定性较高的设计,在周围环境频繁变化的时候,依然可以做到“我自岿然不动”
在 Java 中,只要定义变量就必然要有类型,一个变量可以有两种类型:表面类型和实际类型,表面类型是在定义的时候赋予的类型,实际类型是对象的类型,如 zhangSan 的表面类型是 IDriver,实际类型是 Driver。
对象的依赖关系有三种传递方式
- 构造函数传递依赖对象
在类中通过构造函数声明依赖对象 (构造函数注入)
- Setter 方法传递依赖对象
在抽象中设置 Setter 方法声明依赖关系 (Setter 依赖注入)
- 接口声明依赖对象
- 每个类尽量都有接口或抽象类或两者都具备
- 变量的表面类型尽量时接口或抽象类
- 任何类都不应该从具体类派生
- 尽量不要覆写基类的方法
- 结合里氏替换原则使用