Open7

Ruby によるデザインパターンを読んで

daijiro maeyamadaijiro maeyama

パターンのためのパターン

GoF の一般的な原則、メタ設計パターン

  • 変わるものを変わらないものから分離する
  • インターフェイスに対してプログラムし、実装に対して行わない
  • 継承より集約
  • 委譲、委譲、委譲
  • 必要になるまで作るな
daijiro maeyamadaijiro maeyama

集約は、オブジェクトが何かの一種である (is-a-kind-of) 関係は避けて、何かを持っている (has-a) 関係にするということ。

daijiro maeyamadaijiro maeyama

Template Method パターン

Template Method パターンの一般的な考え方は、骨格となるメソッドを持った抽象基底クラスを構築すること。この骨格となるメソッド (テンプレートメソッド) は抽象メソッドを呼ぶことによって変更に対応するような処理を扱う。

Template Method の具象クラスによってオーバーライドできる非抽象メソッドのことを、フックメソッドと呼ぶ。

daijiro maeyamadaijiro maeyama

Strategy パターン

Strategy パターンは、Template Method パターンと同様の問題に対する委譲ベースのアプローチによる解。
アルゴリズム中の変わる部分を抜き出してサブクラスへと押し込む代わりに、アルゴリズムのパターンごとにばらばらのオブジェクトとしてシンプルに実装する。
異なるストラテジオブジェクトをコンテキストに対して提供することでアルゴリズムに多様性をもたらす。