依赖倒置原则
约 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/8/5 08:34
查看所有更新日志
eb6eb
-improve(docs): use pangu formatter于dd170
-feat(docs): add solid principles series于f29bc
-improve(docs): use chinese punctuation于fea7c
-improve(docs): delete extra whitespace and blank lines于c1c02
-modify(docs): remanage folders and rename files于d5800
-docs: update docs于adccc
-整理设计原则整个部分于756e1
-设计模式改为设计原则于4e139
-update于539fa
-新增文字+CRLF全部替换为LF于