Strategy パターン
Strategyとは
- 振る舞いに関するデザインパターン
- GoFによって定義されたデザインパターンのひとつ
- クラス図はWikipedia参照
Strategy パターン
要点
要点は以下の通り。ここでのクラス名はWikipediaのクラス図に基づく。
- アルゴリズムをStrategyクラスのサブクラスで実装する
- ContextクラスはStrategyクラスのインスタンスをフィールドに持つ
- Contextクラスが保持するStrategyの実体を変えるだけで、処理を動的に切り替えられる
考察
Javaライブラリでの実例
JavaのListenerクラスがStrategyパターンになっている。
JButtonとActionListenerを例に取ると、
- ActionListenerを継承したクラスのメソッドで、ボタンが押されたときの振る舞いを定義。
- JButtonにはaddActionListenerでActionListenerを登録できる。
- ボタンが押されたときの動きは、登録されたActionListenerによって決まる。
という感じで、見事にStrategy。
Javaのライブラリの設計はよくできているなぁと思うし、ソースコードも読める。
デザインパターン勉強の事例集として良いかもしれない。
メリット
クラスの振る舞いを切り分けてあるので、以下のメリットがある。
- 振る舞いを動的に切り替えられる
- 他のクラスに再利用しやすくなる
デメリット
あまり思い付かない。 クラス図が複雑になることくらい?
所感
意識しないで書くと、使わずに済んでしまうパターンだと思う。
うまく使えば保守性がかなり良くなる感じがするので、常に選択肢の一つとして意識しておきたい。