質問

どのような仕組みになっているように利用されている場べき使用すればいいですか?

役に立ちましたか?

解決

説明していきましょう、戦略パターンを容易であることが少なくない。

お持ちのクラス Car() 方法 run(), で使用するとこのように、疑似言語:

mycar = new Car()
mycar.run()

現場を変更したい run() 行動が、プログラムの実行.例えば、をシミュレートしたいモーターの故障または利用のブースト"ボタンを作ってみました。

あはいくつかの方法が考えられていないこのシミュレーション:使用条件諸表およびフラグ変数れる方向は決まっています。この戦略パターンは別:その代表団の挙動 run() の方法別のクラス:

Class Car()
{
    this.motor = new Motor(this) 

    // passing "this" is important for the motor so it knows what it is running

    method run()
    {
        this.motor.run()
    }

    method changeMotor(motor)
    {
        this.motor = motor 
    }

}

変更したい場合は、車の動きを変えるだけのモータです。(やプログラムより実生活ですよね?;-))

でなければならないときに便利でない複雑な状態:変更ができますし、維持していくこともあります。

他のヒント

問題

この戦略パターンを使って問題を解決するもの(または予見しう)に実施された方の異なる 戦略 とを有する明確に定義されたインタフェースしています。それぞれの戦略は完全に有効な独自の戦略とが望ましいと考えられる場合ができるのかんたんに切り替えることが時に行います。

コード例

namespace StrategyPatterns
{
  // Interface definition for a Sort algorithm
  public interface ISort
  {
    void Sort(List<string> list)
  }

  // QuickSort implementation
  public class CQuickSorter : ISort
  {
    void Sort(List<string> list)
    {
      // Here will be the actual implementation
    }
  }

  // BubbleSort implementation
  public class CBubbleSort : ISort
  {
    void Sort(List<string> list)
    {
      // The actual implementation of the sort
    }
  }

  // MergeSort implementation
  public class CMergeSort : ISort
  {
    void Sort(List<string> list)
    {
      // Again the real implementation comes here
    }
  }

  public class Context
  {
    private ISort sorter;

    public Context(ISort sorter)
    {
      // We pass to the context the strategy to use
      this.sorter = sorter;
    }

    public ISort Sorter
    {
      get{return sorter;)
    }
  }

  public class MainClass
  {
    static void Main()
    {
       List<string> myList = new List<string>();

       myList.Add("Hello world");
       myList.Add("Another item");
       myList.Add("Item item");

       Context cn = new Context(new CQuickSorter());
       // Sort using the QuickSort strategy
       cn.Sorter.Sort(myList);
       myList.Add("This one goes for the mergesort");
       cn = new Context(new CMergeSort());
       // Sort using the merge sort strategy
       cn.Sorter.Sort(myList);
    }
  }
}
  • うものがある。戦略は行動計画を達成するための具体的な目標を;
  • "定義のアルゴリズムを内包すれさせることができるようになり、互換性があります。戦略可能のアルゴリズムの変化とは独立してお客様に対して使用します。" (Gang of Four);
  • 指定のクラスを表す潜在活動しています。切り替え授業変更の申請を構築します。(Strategy);
  • この行動を選択できる実行時に使用の多型は設計時間
  • の抽象化では、最新のインスタレーションに埋設実装の詳細由来の授業

enter image description here

  • の代替戦略は変更の申請行動による条件付きロジック(BAD);
  • このパターンを容易に追加と削除より特定の行動をなくても、recode、再試験の全部又は一部のアプリケーション

  • 良への応用が期待されています。

    • そして、そのセット類似アルゴリズムとその必要性にかんたんに切り替えることを願います。戦略パターンが回避可能とifやすさと保守;
    • いたい場合は新しい方法でスーパークラスとなるのは意味のあることでしょう毎にサブクラス.の代わりにインターフェースを見つけた時にそのような新しい方法を使用したインスタンス変数はクラスのサブクラスの新しい機能性インターフェース。これを構成:の代わりに受け継が力を通じて継承のクラスで構成されたオブジェクトの権力

の関連パターンを代表パターン両方の場合、一部の作業を経過したその他の部品です。がわかれば、正常との差これらのパターンのこと(修正してください私について知っておきましょ間違った):

  • Delegate パターンの委譲がインスタンス化により、囲む(委託)クラスこのコード再利用による組成物ではなく継承関係を示します。は、囲むクラスを意識する委譲のコンクリートタイプなどの場合を呼び出し、そのコンストラクタそのものではなくて、使用工場)。

  • 戦略 パターンのコンポーネントを実行しまで小さくすることができ、また依存関係に封入(コンポーネントを使ってそのコンストラクタまたはセッター(宗教).使用中の部品が全くわからないう戦略は使用この戦略は必ず呼び出されたインタフェースを介

誰でも知っているのが違うのか?

から直接 戦略パターンWikipedia記事:

この戦略パターンに役立つ場面が必要で動的にスワップのアルゴリズムを使用願います。この戦略パターンを提供することを目的と手段を定義する家族のアルゴリズム封止に各オブジェクトとしてさせることができるようになり、互換性があります。この戦略パターンアラウンドタウン/アルゴリズムの変化とは独立してお客様が使用します。

に加え、壮大答え:この戦略パターンの強い類似性を渡す機能や機能について他の機能です。の戦略この包装と機能のオブジェクトの後にオブジェクトです。一部の言語通過できる機能を直接うにする必要がないのにパターンです。その他の言語できないパス機能が ができ パスオブジェクトパターンにしています。

特にJavaのような言語にすると、タイプ動物園の言語には小さなことになる自分しか延長するオブジェクトの作成.のため多くの課題をクリアできないようにしているパターンを構成オブジェクトの実現でもあります。言語とのより豊かなタイプ動物園がより簡単な方法について行くの問題がより豊かな種類にもお過ごす時間の学習のタイプのシステム。言語の動的タイピング規律となることも珍しく、sneakyの問題です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top