デザインモードのストラテジー


Strategy戦略モードは、設計モードにおけるオブジェクトの行動パターンであり、主に一連のアルゴリズムを定義し、これらのアルゴリズムを個々のクラスにカプセル化する.
Stratrgy応用は比較的に広範で、例えば、会社の経営業務変化図は、2つの実施形態があるかもしれません.一つは線の曲線で、一つはブロック図です.これは2つのアルゴリズムです.Strategyを使って実現できます.
ここでは文字列の代替を例にとって、ファイルがあります.読み込んだ後、該当する変数を代替して出力したいです.
まず、抽象的なタイプのRepTempRuleを確立して、いくつかの共通変数と方法を定義します.
public abstract class RepTempRule{

protected String oldString="";
public void setOldString(String oldString){
  this.oldString=oldString; 
}

protected String newString="";
public String getNewString(){
  return newString;
}



public abstract void replace() throws Exception;


}
 
 
 
RepTempRuleには抽象的な方法abstractがあります.このreplaceは実は代替の具体的な方法です.今は2つの文字代替案があります.1.テキストのaaaをbbに置き換えます.2.テキストのaaをcccに置換する.対応するクラスはそれぞれRepTempRule One RepTempRuleTwoです.
public class RepTempRuleOne extends RepTempRule{


public void replace() throws Exception{ 

  //replaceFirst jdk1.4    
  newString=oldString.replaceFirst("aaa", "bbbb") 
  System.out.println("this is replace one");
   
}


}
 
public class RepTempRuleTwo extends RepTempRule{


public void replace() throws Exception{ 

  newString=oldString.replaceFirst("aaa", "ccc") 
  System.out.println("this is replace Two");
   
}


} 
 
第二ステップ:クライアントがアルゴリズムを自由に選択できるようにするアルゴリズム解決クラスを確立します.
public class RepTempRuleSolve { 

  private RepTempRule strategy;

  public RepTempRuleSolve(RepTempRule rule){
    this.strategy=rule;
  }

  public String getNewContext(Site site,String oldString) {
    return strategy.replace(site,oldString);
  }

  public void changeAlgorithm(RepTempRule newAlgorithm) {
    strategy = newAlgorithm;
  }

}
 
以下のように呼び出します
public class test{

......

  public void testReplace(){

  //         
  RepTempRuleSolve solver=new RepTempRuleSolve(new RepTempRuleSimple());
  solver.getNewContext(site,context); 

  //     

  solver=new RepTempRuleSolve(new RepTempRuleTwo());
  solver.getNewContext(site,context); 


  }

.....

}
 
 
動作中にアルゴリズムを自由に切り換えることができる目的を達成した.
実際に全体のStrategyの核心部分は抽象類の使用で、Strategyモードを使ってユーザーが変化が必要な時、修正量が少なくて、しかも速いです.
StrategyとFactoryはある程度似ています.Strategyは比較的分かりやすく、運行時刻に自由に切り替えられます.Factoryはオブジェクトの作成に重点を置いています.
Strategyは以下の場合に適しています.
1.ファイルを異なる形式で保存します.
2.異なるアルゴリズムでファイルを圧縮する.
3.異なるアルゴリズムで画像を撮影する.
4.同じデータの図形を異なる形式で出力します.曲線やブロック図barなどです.