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

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