Files
Hui-s-notebook/依赖倒置原则.md
2023-09-10 10:50:53 +08:00

1.8 KiB
Raw Blame History

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。

对象的依赖关系有三种传递方式

  1. 构造函数传递依赖对象

在类中通过构造函数声明依赖对象 (构造函数注入)

  1. Setter 方法传递依赖对象

在抽象中设置 Setter 方法声明依赖关系 (Setter 依赖注入)

  1. 接口声明依赖对象
  • 每个类尽量都有接口或抽象类或两者都具备
  • 变量的表面类型尽量时接口或抽象类
  • 任何类都不应该从具体类派生
  • 尽量不要覆写基类的方法
  • 结合里氏替换原则使用