Strategy パターン

Strategyとは

  • 振る舞いに関するデザインパターン
  • GoFによって定義されたデザインパターンのひとつ
  • クラス図はWikipedia参照
    Strategy パターン

要点

要点は以下の通り。ここでのクラス名はWikipediaのクラス図に基づく。

  • アルゴリズムをStrategyクラスのサブクラスで実装する
  • ContextクラスはStrategyクラスのインスタンスをフィールドに持つ
  • Contextクラスが保持するStrategyの実体を変えるだけで、処理を動的に切り替えられる

考察

Javaライブラリでの実例

JavaのListenerクラスがStrategyパターンになっている。

JButtonとActionListenerを例に取ると、

  • ActionListenerを継承したクラスのメソッドで、ボタンが押されたときの振る舞いを定義。
  • JButtonにはaddActionListenerでActionListenerを登録できる。
  • ボタンが押されたときの動きは、登録されたActionListenerによって決まる。

という感じで、見事にStrategy。

Javaのライブラリの設計はよくできているなぁと思うし、ソースコードも読める。
デザインパターン勉強の事例集として良いかもしれない。

メリット

クラスの振る舞いを切り分けてあるので、以下のメリットがある。

  • 振る舞いを動的に切り替えられる
  • 他のクラスに再利用しやすくなる

デメリット

あまり思い付かない。 クラス図が複雑になることくらい?

所感

意識しないで書くと、使わずに済んでしまうパターンだと思う。
うまく使えば保守性がかなり良くなる感じがするので、常に選択肢の一つとして意識しておきたい。

関連記事


  1. Open Session in Viewは使用すべきなのか?
  2. Singleton パターン
  3. イミュータブルオブジェクト
  4. Factory Method パターン
  5. Template Method パターン
  6. rmコマンドとmvコマンドの事故に備えた安全な使い方
  7. 圧縮アルゴリズム勉強メモ

comments powered by Disqus