依存関係の注入と制御の反転を使用するファクトリ メソッド
質問:
ファクトリ メソッドがさまざまなオブジェクトを作成する場合、渡された多数の依存関係を処理する必要があります。
問題:
ファクトリーで 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 中国語 Web サイトの他の関連記事を参照してください。