1. ホーム
  2. design-patterns

[解決済み] StrategyパターンとDependency Injectionの違いは何ですか?

2022-11-14 03:50:29

質問

StrategyパターンとDependency Injectionは、どちらも実行時にオブジェクトをセット/インジェクトすることができます。StrategyパターンとDependency Injectionの違いは何ですか?

どのように解決するのか?

DIとStrategyは同じように動作しますが、Strategyはより細かい依存関係や短命な依存関係に使用されます。

オブジェクトが固定された戦略で構成される場合、たとえばオブジェクトが構築されるとき、戦略とDIの区別は曖昧になります。しかし、DI シナリオでは、オブジェクトの依存関係がその寿命の間に変更されることは珍しいことですが、ストラテジーではこれは珍しいことではありません。

また、ストラテジーをメソッドの引数として渡すことができます。一方、メソッドの引数注入という関連概念は普及しておらず、ほとんどが自動テストのコンテキストでのみ使用されています。

ストラテジーは意図に焦点を当て、同じ動作契約に従った異なる実装を持つインタフェースを作成することを推奨しています。DIは、ある動作の実装を持ち、それを提供することだけに重点を置いています。

DIでは、実装の一部を入れ替えるだけでなく、他の理由でプログラムを分解することができます。

DIで使われるインターフェースで、実装が1つしかないものは非常によくあります。具体的な実装が1つしかない(ever)"Strategy"は、実際の問題ではありませんが、おそらくDIに近いと思われます。