JAVAデザインパターン(2)戦略パターン

定義

アルゴリズムを定義し、各アルゴリズムをカプセル化して、それらを交換可能にします。一種の行動パターンです。

わかりやすくするために、さまざまな国の税率の計算を例として取り上げます。

現在、私たちのプログラムは中国と米国の税率の計算しかサポートできないとします。

1  public  class Tax_Cal {
 2      
3      public  int CN_Cal(int x){        // 中国の税金を計算する
4          
5      }
 6      
7      public  int US_Cal(int x){        // 米国の税金を計算する
8          
9      }
 10 }

このように書いても問題はないようですが、実際に考えて、将来的に拡大してフランス、日本、その他の国をサポートする必要がある場合、このカテゴリを常に変更する必要がありますが、特に面倒で危険ですか?たとえば、以前の国と競合している場合、それは以前の計算に影響します。

 

したがって、これらを個別に記述し、すべての国税計算を分離します同じインターフェースの実装にはすべて共通のパラメーターxがあります。

1  public  クラス Strategy {           // 戦略モード
2      public  int Cal(int x);
 3  }
 4  
5  public  クラス CN_Tax  Strategy {      // 中国の税計算インターフェイスを実装します
6  
7      @Override
 8      public  int Cal(int x){
 9  
10      }
 11  }
 12  
13  パブリック クラス US_Tax  Strategyを実装します {      // US税計算インターフェイスを実装します
14  
15      @jOverride
 16      public  int Cal(int x){
 17  
18      }
 19  }
 20  
21  public  class Tax_Cal {             // 税計算クラス
22  
23      private Strategy =戦略;          // 戦略を定義する
24  
25      public  void setStrategy(戦略戦略) {      // アクセス戦略
26          this .strategy = strategy;
 27      }
 28  
29      public  int getTax(int x){       // 結果を取得
30          return  this .strategy.cal
 31      }
 32 }

 

このように、すべての税計算は互いに影響し合うことはありません。計算は私たちから独立しているためです。どの国の税を計算するかは、その国のアルゴリズムにアクセスしてgetTaxを呼び出すだけで済みます。書きましょう:

1  public  class Test {
 2      public  static  void main(string [] args){
 3          Tax_Cal tax_cal = new Tax_Cal();        // インスタンス化されたオブジェクト
4          tax_cal.setStrategy(new CN_Tax());      // 中国の税計算へのアクセス
5          int res = tax_cal.getTax(100);        // 結果を取得
6      }
 7 }

要約:

利点:

1.戦略はすべて同じ抽象化を実装しているため、戦略を自由に切り替えることができます。
2.簡単に拡張でき、基本的に元のコードを変更せずに拡張できます。
3.複数の条件ステートメントを使用しないでください。そうしないと、維持する必要があり、ケースを切り替えます。これは、メンテナンスには非常に好ましくありません。

 

ストラテジーモードはシンプルで一般的に使用されるデザインモードであり、通常は単独で使用するのではなく、他のモードと組み合わせて使用​​します。

おすすめ

転載: www.cnblogs.com/Satan666/p/12676379.html
おすすめ