依赖倒置原则
约 350 字大约 1 分钟
2022-03-25
定义
依赖倒置原则(Dependency Inversion)。
- 高层模块不应该依赖低层模块,两者都应该依赖其抽象。
- 抽象不应该依赖细节,细节应该依赖抽象。
实现方法
在高层模块和底层模块之间引入一个抽象的接口层。抽象接口是对低层模块的抽象,低层模块继承或实现该抽象接口。这样高层模块不直接依赖底层模块而是依赖于接口层。
- 依赖于抽象。
- 设计接口而非设计实现。使用继承避免对类的直接绑定。
- 避免传递依赖。使用继承和抽象类来消除依赖。
示例
反例
考虑一个熔炉调节器,从一个 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/6 03:19
查看所有更新日志