2010年6月13日日曜日

Strategyパターン

すみません、仕事で立て込んでいたのでなかなか勉強する暇がありませんでした(´・ω・`)
Strategyパターンとは、様々なアルゴリズムをクラス単位で実装し、実行時に場面に応じて、そのアルゴリズムクラスを切り替えて処理して行くパターンになります。


で、クラス図としては前回のBridgeパターンとあまり変わりません。前回で言うところの実装クラス群に相当するところが今回はアルゴリズムクラス群になります。つまり、1つインターフェースがあり、その実装クラス内でアルゴリズムを実装します。そして、mainになるクラスはそのアルゴリズムクラスのインスタンスを(任意の条件、タイミングで)作り、共通のメソッドを呼べばおkです。

Strategyのインターフェースの例は以下のような感じです。
  1. public interface Strategy {  
  2.     public void exec();  
  3. }  

実装クラスの1つはこんな感じ
  1. public interface AStrategy {  
  2.     ・・・  
  3.     public AStrategy(・・・) {  
  4.         ・・・  
  5.     }  
  6.   
  7.     public void exec() {  
  8.         // AStrategy特有のアルゴリズムを実装  
  9.     }  
  10. }  

他の実装クラスも(きっと)同じ感じになるでしょう

  1. public interface BStrategy {  
  2.     ・・・  
  3.     public BStrategy(・・・) {  
  4.         ・・・  
  5.     }  
  6.   
  7.     public void exec() {  
  8.         // BStrategy特有のアルゴリズムを実装  
  9.     }  
  10. }  
mainクラスでは以下のように呼びます。
  1. public static void main(String[] args) {  
  2.     Strategy aStrategy = new AStrategy(・・・);  
  3.     Strategy bStrategy = new BStrategy(・・・);  
  4.     ・・・  
  5.     aStrategy.exec();  
  6.     bStrategy.exec();  
  7.     ・・・  
  8. }  
あくまでこれは例なので、ある条件の時はaStrategy、そうでないときはbStrategyにしてももちろん構いません。あるいはaStrategy実行中に何かしらの理由でbStrategyに切り替えることもあるかと思います。ここがミソで、このパターンを利用するとアルゴリズムを容易に切り替えられるということなのです。

関連パターン
「Flyweightパターン」(勉強中)
Abstract Factoryパターン」こちらのパターンは工場・部品などをごっそり切り替えるパターン
「Stateパターン」(勉強中)

0 件のコメント:

コメントを投稿