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. 圧縮アルゴリズム勉強メモ