そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

デザインパターンのお勉強「Template Method」

前職の就職の面接の頃から「デザインパターンについて勉強しておくと良い」みたいな話は様々な場面で聞いてはいたものの、どうしても言語やフレームワークの学習みたいな実利重視の方にばかり目が行きがちだったので、良い機会なのでデザインパターンについて勉強してみようと思う。


デザインパターンについてAmazonで書籍を探してみるといくつか見つかるが、原著の翻訳本(オブジェクト指向における再利用のためのデザインパターン)には翻訳に幾分の難があるらしいことや、JavaC++を例として扱った書籍(Java言語で学ぶデザインパターン入門独習デザインパターン C++)は多いものの、ちょうどRubyを勉強していたということもあり「Rubyによるデザインパターン」で学習を進めてみることにした。

Rubyによるデザインパターン

Rubyによるデザインパターン



最初の紹介となるのは3章「Template Method」

使いドコロ

大筋では共通の動きをする複数のバリエーションを持つ処理。

f:id:blue1st:20130421021937p:plain


実際の業務においてもこのような処理を用いる場面は多々ある。

しかしこのような処理をベタに書き込んでいった場合、コードが肥大化してしまい変更箇所が分かりづらくなったり処理の流れが読み取りにくくなったりする問題がある。


そのような場面ではTemplate Methodを用いるべきである。

実装

まず、共通の処理とデータを含む基底クラスを書く。
ここで継承後に置き換えるであろう処理についてはフックメソッドを個別に用意しておく。

そして、それぞれバリエーションにあわせ、基底クラスを継承してフックメソッドを置き換えるようなメソッドを記述したクラスを作成する。
また、外部処理からは継承されたクラスを呼ぶような構造にしておく。

f:id:blue1st:20130421022014p:plain

共通の骨格にバリエーション毎のガワを被せていくイメージ


このような構造にすることにより、大筋の処理を記述したコードが煩雑になることが防げるため、追加修正や処理の流れの把握が容易になる。

Rubyによるデザインパターン

Rubyによるデザインパターン


まぁシステムが自社だけで完結しないとか既にある呼び出し側が拡散しすぎてるとかで使いたくても使えないって状況もあるけどね。(うちの会社のやつとかまさにこれ)