使用依賴注入和控制反轉的工廠方法
問題:
工廠方法建立不同物件時,需要處理大量傳遞的依賴項。
問題所在:
在工廠中使用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中文網其他相關文章!