什么是 依赖注入 dependency injection
如果一个函数(或者类)依赖某个类的实例来实现某个功能,最直接的做法是在这个函数中建立一个实例, 然后调用这个实例的某个函数去实现这个功能, 例如
class Car
{
public:
void run(){ cout<<"car running now\n"; };
};
void deliver()
{
Car car;
car.run();
}
问题: 但如果所依赖的对象有多种选择, 而且这种选择未来可能会增加, 就需要不停的修改此函数(which is very bad).
解决办法: 更好的办法是,将所依赖的对象以参数的形式传给该函数, 也就是所谓的dependency injection. 为了保证调用函数的统一性,最好创建一个虚类(接口类), 如下
class IVehicle
{
public:
virtual void run() = 0;
};
class Car: public IVehicle
{
public:
void run(){ cout<<"car running now\n"; };
};
class eBike: public IVehicle
{
public:
void run(){ cout<<"eBike running now\n"; };
};
void deliver(IVehicle* veh)
{
if(veh != nullptr)
{
v->run();
}
}
依赖注入可以通过两种方式来实现:
- 通过普通参数传入
- 通过构造函数传入
- 通过setter 函数
依赖注入:概念与实现方式
依赖注入是一种软件设计模式,用于减少代码耦合,提高灵活性。当一个函数或类依赖于其他对象时,不再直接创建这些对象,而是通过参数传递或构造函数设置。本文通过示例介绍了如何使用接口和多态性实现依赖注入,包括普通参数、构造函数和setter函数三种方式,以应对可能的对象选择变化。
729

被折叠的 条评论
为什么被折叠?



