找回密码
 立即注册
首页 业界区 业界 依赖倒置 DIP、依赖注入 DI、控制反转 IoC 和工厂模式 ...

依赖倒置 DIP、依赖注入 DI、控制反转 IoC 和工厂模式

瞧蛀 2025-6-4 20:35:22
1. 依赖倒置

依赖倒置原则(Dependency Inversion Principle, DIP)是 SOLID 原则中的一项,其核心思想是通过抽象解耦高层模块和低层模块,使二者都依赖于抽象而非具体实现
依赖反转/倒置的体现:传统依赖方向是高层模块直接调用低层模块,在源码级别上高层模块依赖低层细节模块。而 DIP 通过抽象反转这种依赖关系,使低层模块的实现在源码级别上依赖高层定义的抽象(视为高层模块的一部分)。
1.1 依赖倒置原则的核心


  • 高层模块不直接依赖低层模块,二者都应依赖抽象(接口或抽象类,接口由高层模块定义,视为高层模块的一部分)。
  • 抽象不依赖细节,细节(具体实现)应依赖抽象。
1.2 依赖倒置指导方针


  • 变量不可以持有具体类的引用——改用工厂,避免直接使用 new 持有具体类的引用(new 具体类的操作都封装到工厂中)
  • 不要让类派生自具体类——派生自抽象类或接口,这样就不依赖具体类了
  • 不要覆盖基类中已经实现的方法——如果这样,说明不是一个真正适合被继承的抽象
1.3 示例

场景


  • 高层模块 ReportGenerator 需要生成报告,依赖数据获取功能。
  • 低层模块 MySQLDatabase 和 SQLiteDatabase 提供具体的数据操作。
传统实现(未遵循 DIP)

[code]// 低层模块:直接依赖具体实现class MySQLDatabase {public:    void connect() { /* MySQL 连接逻辑 */ }    std::string fetchData() { return "MySQL 数据"; }};// 高层模块直接依赖低层具体类class ReportGenerator {private:    MySQLDatabase db;  // 直接依赖具体实现public:    void generateReport() {        db.connect();        auto data = db.fetchData();        std::cout
您需要登录后才可以回帖 登录 | 立即注册