Rubyによるデザインパターン ~その1~

昨今、インプットだけでなくアウトプットが大事だといろんな場所で聞くので、ブログというものを始めてみることにしました。

ちょっと前に読んだラス・オルセンさんの「Rubyによるデザインパターン」って本がとっても面白かったので、簡単にまとめてみます。

ノリとしては、GoFのパターンから選んだ14つのパターンに3つほどパターンを付け加えて、順に解説してく感じになってます。

以下、それぞれのパターンについて独断と偏見でコメントつけてみる。

  • Template Method

ただ継承するだけ。複数の似たクラスでインターフェースを揃える為に継承する。Java的発想。

  • Strategy

継承じゃなく移譲を使う。Rubyだとわざわざ移譲先のオブジェクト作らなくても、Procをcallする方法もあり。

  • Observer

Observeされる側のSubjectが、自身に変更があったタイミングとかでObserverに一斉通知。具体的には、適切なパラメータを渡してObserverのメソッドを呼び出す。Observerって名前なのにSubjectばっかり頑張っててとってもあれな感じ。パターン名Notifierとかにすれば良かったのに…。
非同期処理とかで重要になりそうなイメージ。

再帰的な構造を持たせてオブジェクト作ろうぜって話。ツリー構造の内部ノードがCompositeオブジェクトで、葉ノードが葉オブジェクト。これも、Compositeから見て子がCompositeだろうと葉だろうと同じように見える、つまりインターフェースが揃ってるってのが重要。

集約の詳細を知ること無く、子オブジェクトそれぞれに働きかけるための仕組み。Rubyだと内部イテレータがとっても便利な形で用意されてるので、あんま外部イテレータを使う機会は無さそう。c++なんかだと外部イテレータが主流。

  • Command

動作そのものをオブジェクトにしちゃうって話。キューに溜めたりして利用出来るし、いろいろ使えそう。

とりあえず、ここまで6つほどの紹介でした。
むちゃくちゃ中途半端になってしまいましたが、続きはまた後日にしたいと思います。

継続的に書いていけるように頑張ります!!!