ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

Adapter

あるものに皮をかぶせて利用すること。個人的には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