行動パターン - Strategyパターン

戦略モード

戦略モード(Strategyパターン)では、動作やアルゴリズムのクラスは、実行時に変更することができます。戦略モードでは、ポリシーがその変更をオブジェクトとしてオブジェクトを表すと行動変容戦略の多様Contextオブジェクトを作成します。Contextオブジェクトのアルゴリズム戦略実行モードの変更。

入門

:それはに意図され、アルゴリズムのセットを定義し、それらを一つずつをカプセル化し、それらが交換可能になります。

主なソリューション:アルゴリズムと同様の例多様で、複雑で、維持が困難持っている場合...他。

使用するとき:システムは、多くの、多くのクラスを持っている、とだけ彼らの即時の行動を区別。

解決方法:クラスのパッケージにこれらのアルゴリズムは、任意に置換しました。

キーコード:同じインターフェイスを実装します。

応用例:  1、良いアイデアの諸葛亮は、各キットが戦略です。2、旅行、サイクリングへの旅行の方法は、車で、旅への各方法が戦略です。3、のLayoutManagerでJAVA AWT。

利点:  1、アルゴリズムは自由に切り替えることができます。2、複数の条件の使用を避けるために。3、優れたスケーラビリティ。

短所:  1、戦略が増加します。2、すべてのポリシーのクラスは、外部被ばくの必要があります。

使用シナリオ:  1、で多くのクラスのシステムがある場合にのみ、彼らの行動の両者の差は、その後、戦略パターンを使用するオブジェクトは、行動の数でアクションを選択することができ、動的にできます。2、システムの必要性を動的にいくつかのアルゴリズムのいずれかを選択します。オブジェクトが行動をたくさん持っている場合はそれが適切なモードでない場合3.は、これらの行為は、達成するために、複数の条件付き選択文を使用する必要がありました。

注:ポリシーは以上4のシステムであれば、我々は、混合モード、問題解決戦略クラスの拡張の使用を検討する必要があります。

実現

私たちは、のカスタムアクティビティを作成します  戦略の  インタフェースと実装の  戦略  エンティティポリシークラスインターフェイスを。コンテキストは、  いくつかの種類の戦略を使用しています。

StrategyPatternDemo、私たちのデモクラスは、使用  状況  、それが政策の変更を設定するか、使用した場合の動作コンテキストの変化を示すために、ポリシーオブジェクトを。

 

 図1に示すように、インターフェイスを作成します

パブリック インターフェース戦略{
     公共 のint doOperation(INT NUM1、INT NUM2)。
}

クラスを作成します。2.以下を実装するインタフェースエンティティ

パブリック クラス OperationAdd 実装戦略{ 

    @Override 
    公共 INT doOperation(INT NUM1、INT NUM2){
         リターン NUM1 + NUM2。
    } 
}
パブリック クラス OperationSubtract 実装戦略{ 

    @Override 
    公共 INT doOperation(INT NUM1、INT NUM2){
         戻り NUM1 - NUM2。
    } 
}
パブリック クラス OperationMultiply 実装戦略{ 

    @Override 
    公共 int型 doOperation(int型 NUM1、int型からnum2){
         戻り NUM1 * NUM2。
    } 
}

Contextクラスを作成します3。

パブリック クラスコンテキスト{
     プライベート戦略戦略。

    公共コンテキスト(戦略戦略){
         この .strategy = 戦略。
    } 

    公共 INT executeStrategy(INT NUM1、INT NUM2){
         戻りstrategy.doOperation(NUM1、NUM2)。
    } 
}

4、コンテキストビュー、それは行動変容戦略戦略を変更

パブリック クラスStrategyPatternDemo {
     公共 静的 ボイドメイン(文字列[]引数){ 
        コンテキストコンテキスト = 新しいコンテキスト(新しいOperationAdd())。
        System.out.println( "10 + 5 =" + context.executeStrategy(10,5 ))。

        コンテキスト = 新しいコンテキスト(新しいOperationSubtract())。
        System.out.println( "10から5 =" + context.executeStrategy(10,5 ))。

        コンテキスト = 新しいコンテキスト(新しいOperationMultiply())。
        System.out.printlnは("10 * 5 =" + context.executeStrategy(10,5 ))。

    } 
}

輸出

 

 参考:https://www.runoob.com/design-pattern/strategy-pattern.html

おすすめ

転載: www.cnblogs.com/hoo334/p/12529490.html