依赖倒置原则
约 351 字大约 1 分钟
2022-03-25
定义
依赖倒置原则(Dependency Inversion Principle)。
- 高层模块不应该依赖低层模块,两者都应该依赖其抽象。
- 抽象不应该依赖细节,细节应该依赖抽象。
实现方法
在高层模块和底层模块之间引入一个抽象的接口层。抽象接口是对低层模块的抽象,低层模块继承或实现该抽象接口。这样高层模块不直接依赖底层模块而是依赖于接口层。
- 依赖于抽象。
- 设计接口而非设计实现。使用继承避免对类的直接绑定。
- 避免传递依赖。使用继承和抽象类来消除依赖。
示例
反例
考虑一个熔炉调节器,从一个 I/O 通道读取当前的温度,并通过向另一个 I/O 通道发送指令来控制熔炉继续加热或停止。
Regulate.h
const byte THERMONETER=0x86;
const byte FURNACE=0x87;
const byte ENGAGE=1;
const byte DISENGAGE=0;
void Regulate(double minTemp,double maxTemp)
{
for(;;)
{
while (in(THERMONETER) > minTemp)
wait(1);
out(FURNACE,ENGAGE);
while (in(THERMONETER) < maxTemp)
wait(1);
out(FURNACE,DISENGAGE);
}
}
很明显,代码中包含很多实现的底层细节,这段代码并不能很好地被重用。
正例
Regulate.h
void Regulate(Thermometer t, Heater h, double minTemp,
double maxTemp)
{
for(;;)
{
while (t.Read() > minTemp)
wait(1);
h.Engate();
while (t.Read() < maxTemp)
wait(1);
h.Disengage();
}
}
贡献者
更新日志
2025/3/27 09:30
查看所有更新日志
270fc
-feat(docs): add solid principles series于79076
-improve(docs): use chinese punctuation于1289a
-improve(docs): delete extra whitespace and blank lines于c2111
-modify(docs): remanage folders and rename files于aae8b
-docs: update docs于20068
-整理设计原则整个部分于f5cf9
-设计模式改为设计原则于f86ee
-update于93933
-新增文字+CRLF全部替换为LF于fb196
-升级版本+规整文档中的格式于