NullObjectパターン
デザインパターンの必要性
デザインパターンは、GoF(*1)の「オブジェクト指向における再利用のためのデザインパターン」(1995年、日本語訳1999年。以下、GoF本)によって紹介された、23のパターンによって広く知られるようになりました。10年以上がたった今でも多くの設計でこのGoF本で紹介されているデザインパターンが利用されています。
デザインパターンは、オブジェクト指向において普遍的なテクニックを示したものであり、デザインパターンを知ることによって、再利用性の高い「良い」設計を行うことができます。デザインパターンは、ある問題領域に対しての解決策を示しています。つまり、ある問題に対して、どう設計したらよいかというヒントを教えてくれる指南役なのです。
長年設計を行っている人は、自然とこうしたパターンを身につけて利用しているかも知れません。しかし、デザインパターンでは、そのパターンの目的と動機、適用可能範囲を示すことで設計のためのノウハウが整理されています。デザインパターンとして理解しておくことで、次に同じような問題が発生したときに、すぐにそれを応用できます。また、比較的経験が短くても、先人たちのよりよい設計を短時間で理解し、応用できるようになります。デザインパターンはベテランだけでなく、初中級者にとっても知っておくことで、メリットがあると言えます。
しかし、GoF本の23のデザインパターンはあまりにも有名で、すでにさまざまなところで解説されています。そこで、この連載では、GoF本で紹介されている以外のデザインパターンで有用なパターンに焦点を当てて説明していきたいと思います。
(*1):Gang of Four デザインパターンの本における4人の著者(エリック ガンマ、ラルフ ジョンソン、リチャード ヘルム、ジョン ブリシディース)を表す。
デザインパターンとフレームワーク
ソフトウエアのフレームワークは、アプリケーションのための再利用可能な構造や仕組みを提供するクラス群であると言えます。再利用という点では、デザインパターンと目的を同じにしていますが、デザインパターンとフレームワークには以下のような違いがあります。
1.デザインパターンはフレームワークより抽象的である。
フレームワークは、コードで表現されていますが、デザインパターンは、設計のパターンを示したものであり、より抽象的なものです。デザインパターンはその一例だけをコードで表現できます。
2.デザインパターンはフレームワークより細かな要素である。
フレームワークには、デザインパターンを含んでいますが、その逆はあり得ません。
3.デザインパターンはフレームワークほど分野に特化していない。
フレームワークは特定のタイプのアプリケーションに特化しています。例えば、Webアプリケーションのフレームワークは、Webアプリケーション以外には適用できません。デザインパターンは、その目的と適用可能範囲が合えばどのようなアプリケーションにも適用可能です。
ここで示したようにフレームワークとデザインパターンは別のものです。しかし、一方でフレームワークの中ではデザインパターンが利用されているのです。フレームワークでは、デザインパターンが具体的な実装として利用されており、デザインパターンの目的や価値を知る上で非常に良い題材であると言えるのです。