Strategyパターン
アルゴリズムに多態性を持たせたい場合の、委譲ベースのアプローチ。
コンテキストとストラテジオブジェクト間のインターフェースに注意して設計する。
Rubyで書く
基底クラスFormatterはoutput_reportメソッドで例外を投げているだけなので、
この場合、基底クラスを定義せずに書く具象クラスを書いていったほうがRuby的。(ダックタイピング哲学)Report#output_reportの引数がオブジェクトの参照なので、データの流れをシンプルにするが、クラス間の結合度が上がってしまっている。
→必要な引数の数が少なければ、オブジェクトでなくても良い。
(コンテキスト - ストラテジオブジェクト間のインターフェースの検討)
埋め込んだコードが表示されない場合はこちら
→ https://gist.github.com/4010809
コードブロック(Procオブジェクト)を使って書く
- コード例のように、ストラテジオブジェクトの実装がシンプルな場合には、ストラテジをコードブロックに置き換えることでシンプル且つRuby的になる。
埋め込んだコードが表示されない場合はこちら
→ https://gist.github.com/4010931