依赖倒转原则(Dependency Inversion Principle,DIP)是面向对象设计原则之一,它强调高层模块不应该依赖于底层模块,二者都应该依赖于抽象。同时,抽象不应该依赖于具体实现细节,具体实现细节应该依赖于抽象。
该原则的实现原理可以通过以下几点来说明:
抽象定义接口: 高层模块定义抽象接口或者抽象类,而不是具体的实现类。这样,高层模块就不会依赖于底层模块的具体实现细节。
底层模块实现接口: 底层模块实现抽象接口或者抽象类,从而达到高层模块和底层模块之间解耦的目的。
通过依赖注入解耦: 高层模块通过依赖注入的方式将具体实现类的对象注入到抽象接口或者抽象类中,从而实现高层模块和底层模块的解耦。
在 Python 中,实现依赖倒转原则可以通过以下方式:
- # 高层模块, 不依赖底层模块
- class Switch:
- # Switch 类依赖于抽象接口(即 device 参数),而不依赖于具体的实现类
- # 抽象不依赖于具体实现细节
- def __init__(self, device):
- self.device = device
-
- def turn_on(self):
- self.device.turn_on()
-
- def turn_off(self):
- self.device.turn_off()
-
- # 底层模块,具体的实现类
- class DeviceA:
- # 具体实现细节依赖于抽象
- def turn_on(self):
- print('device A turn on')
-
- def turn_off(self):
- print('device A turn off')
-
- deviceA = DeviceA()
-
- '''
- 通过依赖注入的方式,将具体实现类的对象(deviceA)注入到 Switch 类中,
- 实现高层模块和底层模块的解耦
- '''
- switch_deviceA = Switch(deviceA)
-
- switch_deviceA.turn_on()
运行结果:
device A turn on