13

戦略パターンと依存性注入との違いは?すなわち、以下の戦略パターンと依存性注入

を使用すると、Strategyパターンで何ができるかです:DIと

class Foo{ 
    private readonly ISortAlgo _sortAlgo; 

    public Foo(ISortAlgo sortAlgo) 
    { 
    _sortAlgo = sortAlgo; 
    } 

    public void Sort() 
    { 
    _sortAlgo.sort(); 
    } 

} 

あなたは、注射と同じ、基本的にあなたはコンストラクタを持つことができ、セッター、インターフェースなどを行うことができます。ストラテジーパターンと同じ効果が得られます。 DIはまた、疎結合、テスト容易性、配線などの他の原則も設定されていることを認識しています。

実装に関しては、大きな違いはありません。

戦略パターンとDIの違いは何ですか?

+0

現在の回答は特に満足できるものではありません。より良い回答は、実行時に変数の振る舞いが注入される相違に実際に焦点を当てます。 – Mario

答えて

14

まず、依存性注入を注入する方法としてのみならず、コンストラクタ注入だけでなく、方法注入周囲コンテキストを有しています。クライアントが自分のニーズにマッチする特別なものを選択することができるように

第二に、stategyは、行動を定義します。 依存性注入は外部依存関係を抽象化して動作します。

+1

+1。 *ビヘイビア*に言及するために。 –

+1

+1すてきな要約。私はいくつかの混乱は、2つのDPが同じメカニズムを使用しているが、異なる範囲と意図を持っているという事実によると思います。 –

12

Strategy patternは、実行時にオブジェクトの動作(アルゴリズム)を選択できるようにします。ここでは、Dependency injectionはハードコードされた依存関係の削除を許可します。

したがって、これらは競合他社ではありません。彼らの実装は似ているかもしれませんが、彼らの目的は異なっています。

+1

"がメソッドに渡されましたが、これはDIとはみなされませんでした。訂正:DIには複数の形式があります。コンストラクターは最も一般的な形式(しばしば最良のオプション)ですが、メソッドインジェクションも依存インジェクションの一形式です。 – Steven

+0

また、何らかのアクション(私が念頭に置いていたケース)を実行し、クラスを初期化しないためのメソッドに渡された場合は、DIであると考えますか? –

+0

依存関係がメソッドに挿入されます。したがって、依存関係注入の形式です。しかし、メソッドのインジェクションは、通常、依存関係を契約の一部にする必要があるため、依存関係を非常に壊れやすい方法で注入する方法であり、メソッド間の依存関係をコールスタックのメソッドからメソッドに渡すのは面倒です。 – Steven

6

戦略では、オブジェクトの動作を変更できます。 DIは、抽象に依存することを可能にするデザインパターンです。

4

依存性注入は、テストおよびシステムの拡張性に優れた構築フォームロジックを分割するのに役立つパターンです。他のパターンが適合する場所でも使用することができます。シングルトン。

戦略パターンは異なる問題を解決します。ランタイムは、多形性を使ってOOPでアルゴリズムを選択することができます。

確かに、彼らは一緒に働くことができます。