Design Patterns in RubyでStrategyパターンを学んだ
Design Patterns in Ruby でStrategyパターンを学んだ。自分用のメモとして残しておく。
Design Patterns in Ruby (Adobe Reader) (Addison-Wesley Professional Ruby Series) (English Edition)
- 作者:Russ Olsen
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2007/12/10
- メディア: Kindle版
オブジェクトによって処理は異なるがインターフェースが等しいときStrategyパターンで複雑さを取り除くことができる。
Strategyパターンと同じ問題を解決する手法としてTemplate Methodパターンがある。Template Methodは、継承で問題を解決するため親クラスの情報を引き継いでしまうという欠点がある。
Strategyパターンは、継承の代わりに委譲でアルゴリズムの複雑性を隠蔽する。
以下に簡単なStrategyパターンの例を示す。
class Payment def initialize(platform) @platform = platform end def purchase @platform.purchase(self) end end module Platform class AppStore TARGET_URI = "https://app.store".freeze def purchase(context) puts "Purchase Service on App Store and process complex tasks" end end end module Platform class GooglePlay TARGET_URI = "https://google.play".freeze def purchase(context) puts "Purchase Service on Google Play and process complex tasks" end end end
Strategyパターンの利点と欠点
- サブクラスでなく委譲である
- 条件文を排除できる
- 同じ振る舞いに対して異なる実装を提供できる
- クライアントは、各Strategyの実装を知っている必要がある
- Contextの情報を全く利用しないStrategyが存在する
参考文献
- 作者:エリック ガンマ,ラルフ ジョンソン,リチャード ヘルム,ジョン ブリシディース
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 1999/10
- メディア: 単行本