14

戦略パターンは依存性注入とどのように異なりますか?

つまり、以下は戦略パターンでできることです。

class Foo{
   private readonly ISortAlgo _sortAlgo;

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

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

}

DIを使用すると、同じことができます。基本的に、コンストラクター、セッター、インターフェイスなどのインジェクションを行うことができます。ストラテジーパターンと同じ効果があります。DIは、緩い結合、テスト容易性、配線など、他の原則のセットでもあることを認識しています。

実装に関しては、あまり違いは見られません。

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

4

4 に答える 4

15

まず、依存性注入には、注入するメソッドとしてのコンストラクター注入だけでなく、プロパティメソッド注入、およびアンビエントコンテキストもあります。

第二に、stategy振る舞いを定義するので、クライアントは自分のニーズに合った特別なものを選択できます。依存性注入は外部依存性の抽象化で機能しますが。

于 2012-08-07T17:07:05.030 に答える
13

ストラテジー パターンを使用すると、オブジェクトの動作 (つまり、そのアルゴリズム) を実行時に選択できます。一方、依存性注入を使用すると、ハードコーディングされた依存関係を削除できます。

したがって、彼らは競争相手ではありません。実装は似ているかもしれませんが、目的は異なります。

于 2012-08-07T16:59:52.060 に答える
6

ストラテジーを使用すると、オブジェクトの動作を変更できます。DI は、抽象化に依存できる設計パターンです。

于 2012-08-07T17:01:01.887 に答える
4

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

戦略パターンは別の問題を解決します。ランタイムがアルゴリズムを選択できるようにします - ポリモーフィズムによる OOP で。

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

于 2012-08-07T17:03:25.647 に答える