今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

どのデザインパターンが重要か?

なんて、トピックスが mixiJava コミュニティに立てられてる。どのって?みんな重要に決まってるやん。
ざっと目を通したけど、いろんな人がコメント書いてるけど、Template Method パターンのファンが多いのが気になる。とりあえず、そこにもコメントしてみた。

Template Method パターンのファンが多いみたいですが、なぜでしょうか?

スーパークラス(Template Methodを用意する側)の実装をまったく気にせずにサブクラスを作れるような Template Method パターンの実装は、かなり難しいと思います。継承が前提なので、ついつい結合度が高くなりがちだし、サブクラス側ではLSPに反しないよう気をつけなきゃいけないし。

個人的には Strategy パターンを多用するかな。
Atomicityあげようとすると、自然と委譲が増えるじゃないですか。で、その委譲を実装するのに Strategy パターンが適切なケースが(経験上)多いです。

Template Method は、初心者にはとっつきやすい印象があるのかも知れんけど、実際のプロジェクトで中途半端な設計のまま Template Method を採用すると、あとでぐだぐだになりやすい。実際にもそういう例をいくつか見てるから、あんまりお勧めできない。

Servlet みたいに、スーパークラスの実装を気にせずにサブクラスを作れるような、うまく設計できてる例もあるけど、あれも Template Method であるべき理由はないんじゃない?調べたわけじゃないけど(逃げw)。