あるものに皮をかぶせて利用すること。個人的にはWrapper(ラッパー)といったほうがしっくりくる。
たとえば、ライブラリを利用する部分で、直接ライブラリの関数を呼ぶのではなく、ライブラリを使用するクラスを用意しておけば、ライブラリのメソッド名が変更されたり、引数の項目が追加されたりしたような場合でも、ライブラリを使用するクラスの部分だけを修正するだけで済む。
Adapterには2種類あり、クラスの継承を使ったものと、インスタンスの委譲を使ったものがある。継承を使ったものは対象となるクラスを継承してWrapperとなるクラスを作る。委譲を使ったものはWrapperとなるクラスが対象のインスタンスをメンバとして持つ。
クラスBaseのdoBase()をクラスAdapterのdoAdapter()で呼ぶようにしたのが次のような感じ。
class Base { public void doBase() { ... } } // 継承を使った場合 class AdapterA : public Base { public void doAdapter() { doBase(); } } // 委譲を使った場合 class AdapterB { Base base; public void doAdapter() { base.doBase(); } }
(このソースはイメージを表したもので、実際にはこのまま入力しても動作しない)
参考文献:Java言語で学ぶデザインパターン入門
参考:
ギコ猫とAdapterパターン
Adapter パターン - Wikipedia