RubyでStrategyパターン

- - posted in Design Pattern, Ruby

Strategyパターン

  • アルゴリズムに多態性を持たせたい場合の、委譲ベースのアプローチ。

  • コンテキストとストラテジオブジェクト間のインターフェースに注意して設計する。

Rubyで書く

  • 基底クラスFormatterはoutput_reportメソッドで例外を投げているだけなので、
    この場合、基底クラスを定義せずに書く具象クラスを書いていったほうがRuby的。(ダックタイピング哲学)

  • Report#output_reportの引数がオブジェクトの参照なので、データの流れをシンプルにするが、クラス間の結合度が上がってしまっている。
    →必要な引数の数が少なければ、オブジェクトでなくても良い。
    (コンテキスト - ストラテジオブジェクト間のインターフェースの検討)

埋め込んだコードが表示されない場合はこちら
https://gist.github.com/4010809

コードブロック(Procオブジェクト)を使って書く

  • コード例のように、ストラテジオブジェクトの実装がシンプルな場合には、ストラテジをコードブロックに置き換えることでシンプル且つRuby的になる。

埋め込んだコードが表示されない場合はこちら
https://gist.github.com/4010931

Comments