戦略モード
戦略モード(Strategyパターン)では、クラスの行為、またはアルゴリズムを実行時に変更することができます。 デザインパターンのこのタイプは、行動パターンに属します。
戦略モードでは、我々は、オブジェクトとコンテキストオブジェクトの表現を変更するポリシーオブジェクトとして行動変容戦略のさまざまなを作成します。 アルゴリズムの実行コンテキスト・オブジェクトを変更するポリシー・オブジェクト。
入門
意図:アルゴリズムの家族の定義は、それらを各1カプセル化して、それらを交換可能にします。
主に解決するために:複数の同様のアルゴリズムの場合は...他に複雑で、維持が困難もたらした場合に使用します。
使用するとき:システムは、多くの、多くのカテゴリがあり、唯一の彼らの即時の行動を区別します。
どのように修正するには:パッケージクラスにこれらのアルゴリズムは、任意に置き換えられます。
キーコード:同じインターフェイスを実装します。
応用例:1、良いアイデア諸葛孔明、各キットが戦略です。2は、車で、自転車に乗ることを選択し、移動する走行方法は、移動する各方法が戦略です。 3、JAVAはのLayoutManagerをAWT。
利点:1、アルゴリズムは自由に切り替えることができます。複数の条件の使用を避けるために2、。 3、良いスケーラビリティ。
短所:1、戦略が増加します。2、すべてのクラスは、外交政策の露出の必要があります。
使用シナリオ:1、多くのクラスは、唯一の自分の行動でその差は、その後、動的オブジェクトの多くの行動の行為をさせるために選択することができます戦略パターンを使用するシステムが存在する場合。図2は、システムが動的にいくつかのアルゴリズムのいずれかを選択する必要があります。 それが適切なモードでない場合、オブジェクトは、行動をたくさん持っている3.場合は、これらの行為は、複数の条件を達成するための文を選択している使用していました。
注:以上の4のシステムのポリシーは、あなたが拡張ポリシークラスの問題を解決するために、混合モードの使用を検討する必要がある場合。
実現
私たちは、企業戦略戦略戦略インターフェースの明確に定義されたインタフェースと実装の活動を作成します。コンテキストは、特定のクラスポリシーを使用することです。
StrategyPatternDemo、政策変更を設定したり、変更するために使用されたときの動作を実証するためにコンテキストコンテキストとポリシーオブジェクトを使用して私たちのデモクラス。
ステップ1
インターフェイスを作成します。
Strategy.java
パブリックインターフェイス戦略{ 公共int型doOperation(int型NUM1、int型からnum2); }
ステップ2
インターフェイスを実装するエンティティクラスを作成します。
OperationAdd.java
パブリッククラスOperationAddは戦略を{実装します @Override 公共int型のdoOperation(int型NUM1、int型からnum2){ NUM1 + NUM2を返します。 } }
OperationSubstract.java
パブリッククラスOperationSubstractは戦略を{実装します @Override 公共int型のdoOperation(int型NUM1、int型からnum2){ 戻り値num1 - からnum2; } }
OperationMultiply.java
パブリッククラスOperationMultiplyは戦略を{実装します @Override 公共int型のdoOperation(int型NUM1、int型からnum2){ NUM1の*のNUM2を返します。 } }
ステップ3
Contextクラスを作成します。
Context.java
パブリッククラスコンテキスト{ プライベート戦略戦略。 公共コンテキスト(戦略戦略){ this.strategy =戦略。 } 公共int型executeStrategy(int型NUM1、int型からnum2){ strategy.doOperation(NUM1、NUM2)を返します。 } }
ステップ4
それは行動変容戦略戦略を変更したときに参照するコンテキストを使用してください。
StrategyPatternDemo.java
パブリッククラスStrategyPatternDemo { 公共の静的な無効メイン(文字列[] args){ コンテキストcontext =新しいコンテキスト(新しいOperationAdd()); System.out.println( "10 + 5 =" + context.executeStrategy(10、5))。 コンテキスト=新しいコンテキスト(新しいOperationSubstract()); System.out.println( "10から5 =" + context.executeStrategy(10、5)); コンテキスト=新しいコンテキスト(新しいOperationMultiply()); System.out.println( "10 * 5 =" + context.executeStrategy(10、5)); } }
ステップ5
出力を確認します。
10 + 5 = 15 10--5 = 5 10 * 5 = 50