1. 定义
依赖倒置原则(Dependency Inversion Principle, DIP)
依赖倒置原则是面向对象设计中的五大原则(SOLID)之一,由Robert C. Martin提出。其核心思想是:
高层模块不应该依赖低层模块,二者都应该依赖抽象。
抽象不应该依赖细节,细节应该依赖抽象。
换句话说,依赖倒置原则强调通过抽象(如接口或抽象类)来解耦高层模块和低层模块,使得系统更加灵活、可扩展和易于维护。
2. 为什么要遵循依赖倒置原则?
-
降低耦合:通过依赖抽象,高层模块和低层模块之间的耦合度降低。
-
提高可扩展性:通过抽象接口,可以轻松替换或扩展低层模块的实现。
-
增强可测试性:依赖抽象使得单元测试更加容易,可以通过模拟(Mock)对象来测试高层模块。
-
代码更灵活:系统的设计更加灵活,能够适应需求的变化。
3. 违反依赖倒置原则的例子
假设我们有一个高层模块LightController,它直接依赖一个低层模块LightBulb:
class LightBulb {
public:
void turnOn() {
std::cout << "LightBulb: Turned on" << std::endl;
}
void turnOff() {
std::cout << "LightBulb: Turned off" << std::endl;
}
};
class LightController {
private:
LightBulb bulb;
public:
void