デザインパターンとは、システム設計におけるクラスやインターフェースの関係に名前をつけたものです。GoFの23のパターンが有名です。

デザインパターンというのは、どんなパターンなのか、パターンの目的は何かということを覚えることが非常に重要なのですが、これを実際に適用しようとした場合に、いつ適用していいかが見えてこないとお話になりません。

そこで、自分の勉強も兼ねつつ、パターンの実践時における使用場所や、パターンを適用するきっかけを見つけられるようにメモしておきます。

最初は、仕様の違いを吸収する目的で使われる、Adapterパターンです。

Adapterパターン

Adapterパターンは、仕様の違い(インターフェースの違いとも言う)を吸収する目的で使われるパターンです。

Adapterクラス図

例えば、Javaにはプリミティブ型と呼ばれる非オブジェクト型の存在があります。intやshort、long、byte、float、doubleなどです。これをListに追加するとき、Javaのリストはオブジェクト型しか引数に取ることができないので、直接は格納することができません。

この場合、おそらくint → Integer、double → Double といった感じで、オブジェクト型のクラスを使うことになると思います。JavaでAdapterパターンを使用したよい例が、以上のような例です。

これが仕様の違いです。このような時、Adapterパターンを使って、仕様の違いを吸収します。 Adapterパターンは、別名ラッパーとも呼ばれます。

パターンの適用タイミング

このパターンは仕様の違いを吸収するだけでなく、Adapterとなるクラスを介して、層を増やすことができます。一般に層を増やすと、変更に強くなり、保守性が高まります。

サードパティ製品、例えばExcelをJavaから操作できるようなライブラリ、をプロジェクトで使う場合などに、Adapterパターンを使うことができます。サードパティ製品と、プロジェクトドメインのクラスとの間にAdapterを噛ますことで、層を増やし、変更に強くすることができます。

また、サードパティによって提供されている機能の中に、たまたま必要な機能がほんの少し足りない場合など、Adapterパターンで実装を隠してしまえば、サードパティ製品を利用している他のところと統一的にコーディングすることができます。

もうひとつ、ソースコードを直接いじることができないのに機能の追加や呼び出し先の変更を変更する必要がある場合。

例えば、すでに稼働中のアプリケーションで、ある機能を試しに別の機能に変更してみたい場合などがそうです。この場合は、稼働中の機能と共通のインターフェースを実装したAdapterが別の機能を呼び出すようにするといった使い方ができます。

  • サードパティによって提供されるライブラリを使う場合
  • 統一的なインターフェースを使いたいのだが、ほんの少しだけ機能が足りない場合
  • ソースコードに手を入れられないのだが、機能追加、機能変更を行いたい場合

の内のどれか一つに当てはまる場合、このパターンを使えるタイミングかもしれません。

実装サンプルと参考文献

Adapterパターンの実装方法をもっと詳しく知りたい場合は、下記のサイトにアクセスするのをお勧めします。もしくは、参考書籍を載せておきますので、そちらをお買い求めください。(^^;)

  • TECHSCORE(Adapterパターン)

TECHSCORE

  • デザインパターンのお勧め書籍

  • 独習シリーズのデザインパターン編。デザインパターンを一人でも学べます。

  • Sun Microsystemのお墨付き。GoF以外のパターンも学べます。

  • UMLを使って、オブジェクト指向のいいとこ取りができます。

  • デザインパターンだけではなく、ソフトウェア設計の原則やプラクティスまで学びたい人におすすめ