根据定义,依赖注入促进了松散耦合、可维护和可测试的代码,并且使用接口和构造函数注入我们可以获得实现接口的类的对象。
但是当我们实现工厂时,我们根据工厂方法中传递的 Type 创建对象 例如:
interface IVehicle
{
int WheelCount();
}
class car : IVehicle
{
int WheelCount()
{ }
}
class bike : IVehicle
{
int WheelCount()
{ }
}
class factory
{
public IVehicle factoryMethod(string type)
{
switch(type)
{
case "bike":
new bike();
break;
case "car":
new car();
break;
}
}
}
在
main()
:
factory obj = new factory();
IVehicle vehicle = obj.factoryMethod("bike");
当我们通过在工厂方法中直接实例化具体类来创建对象时。
那么工厂设计模式是否违反了依赖注入?
不,它没有。但是你的代码编写方式确实违反了。
相反,如果你简单地修改一下 Factory 类的代码,它将遵循 DI 原则。
像这样:
Class Factory{
private IVehicle bikeInstance;
private IVehicle carInstance;
public Factory(IVehicle bike, IVehicle car)
{
bikeInstance = bike;
carInstance = car;
}
}
通过Factory类构造函数注入实例并通过faxctoryMethod()返回它们