使用依赖注入和控制反转的工厂方法
问题:
工厂方法创建不同对象时,需要处理大量传递的依赖项。
问题所在:
在工厂中使用switch case语句是一种代码坏味。它将依赖项引入工厂本身,并使其难以扩展。
解决方案:依赖注入的策略模式
接口:
定义汽车工厂和汽车策略接口,以将汽车的创建与具体实现解耦。
<code>public interface ICarFactory { ICar CreateCar(); bool AppliesTo(Type type); } public interface ICarStrategy { ICar CreateCar(Type type); }</code>
工厂:
为每种汽车类型实现单独的工厂。这些工厂的依赖项将由DI容器注入。
<code>public class Car1Factory : ICarFactory { private readonly IDep1 dep1; private readonly IDep2 dep2; private readonly IDep3 dep3; // ... (构造函数和工厂方法) }</code>
策略:
汽车策略类将使用工厂接口根据输入类型创建汽车。
<code>public class CarStrategy : ICarStrategy { private readonly ICarFactory[] carFactories; // ... (构造函数和策略方法) }</code>
用法:
在组合根中,将适当的依赖项注入工厂类并创建汽车策略。使用该策略创建所需的汽车类型。
<code>var strategy = new CarStrategy(new ICarFactory[] { new Car1Factory(dep1, dep2, dep3), // ... }); var car1 = strategy.CreateCar(typeof(Car1));</code>
优点:
以上是依赖注入如何解决工厂方法中依赖较多的问题?的详细内容。更多信息请关注PHP中文网其他相关文章!