阅读量:0
在 C++ 中,我们可以使用模板和工厂函数来实现依赖注入。这里是一个简单的例子:
首先,定义一个接口 IService
和实现该接口的类 ServiceA
和 ServiceB
:
#include<iostream> #include<memory> // 定义接口 class IService { public: virtual void execute() = 0; }; // 实现类 ServiceA class ServiceA : public IService { public: void execute() override { std::cout << "ServiceA is executing."<< std::endl; } }; // 实现类 ServiceB class ServiceB : public IService { public: void execute() override { std::cout << "ServiceB is executing."<< std::endl; } };
然后,创建一个工厂函数,根据输入参数创建不同类型的服务对象:
std::unique_ptr<IService> createService(const std::string& serviceType) { if (serviceType == "ServiceA") { return std::make_unique<ServiceA>(); } else if (serviceType == "ServiceB") { return std::make_unique<ServiceB>(); } else { throw std::invalid_argument("Invalid service type."); } }
最后,通过依赖注入将服务对象传递给需要它的类:
class Client { public: explicit Client(std::unique_ptr<IService> service) : m_service(std::move(service)) {} void doWork() { m_service->execute(); } private: std::unique_ptr<IService> m_service; };
在主函数中,我们可以根据需要选择具体的服务类型,并将其注入到客户端中:
int main() { // 选择具体的服务类型 std::string serviceType = "ServiceA"; // 使用工厂函数创建服务对象 auto service = createService(serviceType); // 将服务对象注入到客户端中 Client client(std::move(service)); // 客户端执行操作 client.doWork(); return 0; }
这样,我们就实现了基于 C++ 的依赖注入。当需要更改具体的服务实现时,只需修改 main()
函数中的 serviceType
变量即可,而无需修改客户端代码。