この記事の例は、参照のためにJava戦略モデルを共有しています。特定のコンテンツは次のとおりです
1。戦略パターンは、ポリシーパターンとも呼ばれる比較的単純なモデルです。
定義は次のとおりです。
アルゴリズムのファミリーを定義し、それぞれをカプセル化し、それらを交換可能にします。
(アルゴリズムのセットを定義し、各アルゴリズムをカプセル化し、それらを交換可能にします。)
ポリシーパターンの一般的なクラス図は次のとおりです。
ポリシーモデルの3つの役割:
●コンテキストの役割とも呼ばれるコンテキストカプセル化の役割は、過去と未来をつなぐカプセル化の役割を果たし、高レベルモジュールのポリシーとアルゴリズムへの直接アクセスをブロックし、可能な変更をカプセル化します。
●戦略要約戦略の役割戦略とアルゴリズムファミリの抽象化(通常はインターフェイス)は、各戦略またはアルゴリズムが持つ必要がある方法と属性を定義します。
●具体的な戦略特定の戦略の役割は、抽象的なポリシーの操作を実装しており、このクラスには特定のアルゴリズムが含まれています。
ポリシーパターンは、カプセル化された役割のコンストラクターに特定のポリシーを渡し、このポリシーを実行することです。
ポリシーモードの一般的なソースコードは次のとおりです。
public class test3 {public static void main(string [] args){//特定の戦略戦略= new ConcreTestrategy1(); //コンテキストオブジェクトを宣言しますコンテキストコンテキスト= new Context(Strategy); //カプセル化されたメソッドContext.doanythinig()を実行します。 }}インターフェイス戦略{//ポリシーモードの算術ルールpublic void dosomething(); } class ConcreTestrategy1を実装しています{public void dosomething(){system.out.println( "特定の戦略の算数ルール1"); }} class concreTestrategy2実装戦略{public void dosomething(){system.out.println( "特定の戦略2の算数ルール"); }} class Context {//抽象戦略プライベート戦略戦略。 //コンストラクターを特定の戦略を設定します} //カプセル化された戦略方法public void doanythinig(){this.strategy.dosomething(); }}戦略モデルの利点:
●アルゴリズムを自由に切り替えることができます
これは、ポリシーモデル自体によって定義されます。抽象戦略が実装されている限り、それはポリシーファミリーのメンバーになり、カプセル化の役割を通じてそれをカプセル化し、それが「自由に切り替え可能な」戦略が外の世界に提供されるようにします。
●複数の条件を使用して判断しないでください
ポリシーモデルがない場合は、それがどのように見えるかについて考えてみましょう。戦略ファミリには5つの戦略アルゴリズムがあります。いつか戦略Aを使用し、いつか戦略Aを使用する必要があります。
戦略bを設計する方法は?複数の条件付きステートメントを使用しますか?マルチコンディショナルステートメントの維持は容易ではなく、エラーの確率が大幅に強化されています。ポリシーモードを使用した後、他のモジュールは採用する戦略を決定できます。ポリシーファミリが外部に提供するアクセスインターフェイスは、操作を簡素化し、条件付きステートメントの判断を回避するカプセル化クラスです。
●優れたスケーラビリティ
これは、それがあまりにも明白だからです。既存のシステムに戦略を追加するのは簡単すぎます。インターフェイスを実装するだけで、他に変更する必要はありません。これは、繰り返し分解できるプラグインに似ており、OCPの原理に大きく適合しています。
ポリシーパターンの短所:
●ポリシークラスの数が増加します。各戦略はクラスであり、再利用の可能性は非常に少なく、クラスの数は増加します。
●すべての戦略クラスを公開する必要があります
ポリシーモードにシナリオを使用します。
●複数のクラスには、アルゴリズムや動作にわずかに異なるシナリオしかありません。
●アルゴリズムを自由に切り替える必要があるシナリオ。
●アルゴリズムのルールをブロックする必要があるシナリオ。
2。ポリシーモードの拡張 - ポリシーの列挙
ポリシーの列挙は次のように定義されます。
●それは列挙です。
●これは、集中戦略パターンの列挙です。
例は次のとおりです。
質問:3つのパラメーターを入力し、追加および減算操作を実行します。 2つのパラメーターはintタイプで、残りのパラメーターは文字列タイプです。 「+」と「 - 」の2つのシンボルのみを選択できます。複雑な検証を考慮しないでください。私たちがしているのは白いボックステストであり、入力するのは標準のINTタイプと準拠の文字列タイプです。
java.util.arraysをインポートします。 public class test3 {public static void main(string [] args){//入力された2つのパラメーターは、int a = integer.parseint(args [0]);文字列シンボル= args [1]; //シンボルint b = integer.parseint(args [2]); System.out.println( "入力パラメーターは次のとおりです。 System.out.println( "実行結果は次のとおりです。 }} enum calculator {// add operation add( "+"){public int exec(int a、int b){return a+b; }}、//減算操作sub( " - "){public int exec(int a、int b){return a -b; }};文字列値= ""; //メンバー値タイププライベート計算機(String _Value){this.Value = _Value; } //列挙メンバーの値を取得public string getValue(){return this.value; } //抽象関数を宣言しますパブリックアブストラクトint exec(int a、int b); }上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。