当前位置: 首页 > news >正文

C++的依赖注入

文章目录

    • 含义
    • 实现方式
      • 1、构造函数注入(Constructor Injection):
      • 2、属性注入(Setter Injection):
      • 3、接口注入(Interface Injection):
    • 依赖注入的好处
    • 依赖注入的工具

含义

依赖注入(Dependency Injection, DI)是一种设计模式,用于减少代码中的耦合性,使得组件之间更加独立。它的核心思想是将对象的依赖关系从内部管理改为由外部传入,从而使代码更加灵活和可测试。

实现方式

1、构造函数注入(Constructor Injection):

依赖对象通过构造函数参数传递给类的实例。这是最常见的依赖注入方式。

class Promotion {
public:Promotion(ProStategy *sss) : s(sss){}~Promotion(){}double CalcPromotion(const Context &ctx){return s->CalcPro(ctx);}
private:ProStategy *s;
};int main () {Context ctx;ProStategy *s = new VAC_QiXi1();Promotion *p = new Promotion(s);p->CalcPromotion(ctx);return 0;
}

2、属性注入(Setter Injection):

依赖对象通过setter函数注入到类的实例中。

class Car {
private:Engine* engine;
public:void setEngine(Engine* eng) {engine = eng;}void drive() {engine->start();// Car driving logic}
};int main() {Engine engine;Car car;car.setEngine(&engine);car.drive();return 0;
}

3、接口注入(Interface Injection):

通过接口的方法来注入依赖,C++中这种方式较少使用,因为C++中接口的使用并不像Java或C#中那么普遍。

class IEngine {
public:virtual void start() = 0;
};class Engine : public IEngine {
public:void start() override {// Engine starting logic}
};class Car {
private:IEngine* engine;
public:void setEngine(IEngine* eng) {engine = eng;}void drive() {engine->start();// Car driving logic}
};int main() {Engine engine;Car car;car.setEngine(&engine);car.drive();return 0;
}

依赖注入的好处

  1. 降低耦合:通过依赖注入,类与类之间的依赖关系通过接口或抽象的方式传递,减少了类之间的耦合性。
  2. 提高测试性:由于依赖关系是通过外部传入的,可以轻松替换依赖对象为mock对象,从而更容易进行单元测试。
  3. 灵活性和可扩展性:代码的灵活性提高,可以更容易地更换依赖对象,而不需要修改类的内部实现。

依赖注入的工具

在C++中,由于其编译时类型检查的特性,实现依赖注入通常比其他动态语言复杂一些。为了简化这一过程,可以使用一些依赖注入框架,比如Boost.DI、Google’s Fruit等。


总的来说,依赖注入是一种非常有效的设计模式,特别是在大型项目中,它可以帮助开发者更好地管理代码的复杂性。


http://www.mrgr.cn/news/499.html

相关文章:

  • 小程序分账有哪些常见的应用场景
  • C++多态
  • Qt 子窗体直接调用父窗体成员、函数、控件的方法
  • 语音助手Verbi:科技创新的未来
  • VS2017 MFC 使用3D_Button控件注意事项
  • 苍穹外卖-day03(SpringBoot+SSM的企业级Java项目实战)
  • 【STM32项目】在FreeRtos背景下的实战项目的实现过程(二)
  • 在Oracle中对比一张表的列是否在其他N张表的列
  • Linux对ubuntu的cuda相关操作
  • 搭建内网开发环境(一)|基于docker快速部署开发环境
  • 【AI趋势6】大模型与游戏共振
  • GitHub每日最火火火项目(8.19)
  • PYQT实现上传图片,保存图片
  • 在PHP中使用file_get_contents提取JSON值
  • 第12天 优惠卷的使用
  • 2024年运营技术与网络安全态势研究报告:遭遇多次网络威胁的比例暴增
  • 克服编程学习中的挫败感,收获满满的成就感
  • 爬虫配置代理:保护隐私有效地抓取数据
  • 超网和无类间路由是什么?
  • 尊享奢睡新境界:康姿百德柔压磁性枕匠心设计引领品质睡眠革命