Strategy Pattern


アルゴリズムの切り替えパターン

Design Pattarm MENU

サンプルコードは
二つのクラスインスタンスを比較し
比較結果をint値で戻すというクラスを
Strategy継承クラスで作成します

アルゴリズムを切換えてはいませんが
戻り値のint値をアルゴリズムとして表現しています

以下のクラス構成で確認します

クラス 説明
interface Strategy 切替えアルゴリズムのメソッドを定義
メソッドはsam.classの2つのインスタンスを比較し、比較結果をint値として戻す
compare.class Strategyを実装する
useStrategy.class userが利用し、切替アルゴリズムを実行する
sam.class 比較される対象クラス
user(Main.class) 動作確認

*user 他の開発者がこのパターンを利用する、という意味合いを含みます

interface_Strategy
interface Strategy{int compare(sam s1,sam s2);}
compare.class
class compare implements Strategy{
  public int compare(sam s1,sam s2){
    if(s1.i <  s2.i){return 1;}else
    if(s1.i == s2.i){return 0;}else{
       return -1;
    }
  }
}
useStrategy.class
class useStrategy{
  Strategy strategy = null;
  useStrategy(Strategy st)  {this.strategy=st;}
  int compare(sam s1,sam s2){return strategy.compare(s1,s2);}
}
sam.class
class sam{
      String str;
      int i;
      sam(String str,int i){
          this.str = str;
          this.i   = i;
      }
}
user(Main.class)
public static void main(String[] args){
  sam sam1 = new sam("s1",3);
  sam sam2 = new sam("s2",2);
  compare     com = new compare();
  useStrategy us  = new useStrategy(com);
  System.out.println(us.compare(sam1,sam2));
}}