Adapter


既存のクラスのインタフェースを変更したいが、
既存のクラスは変更したくない場合に間にadapterクラスを用いる。



BaseClass.java (既存のクラス)

package gof;

public class BaseClass {

    private int width;
    private int height;

    // コンストラクタ
    public BaseClass(int w, int h){
        width  = w;
        height = h;
    }

    // 幅を返す
    public int getWidth(){
        return width;
    }

    // 高さを返す
    public int getHeight(){
        return height;
    }

}

AdapterLab.java (Adapterクラス)

package gof;

public class AdapterLab {
	
    private BaseClass baseclass;

	// コンストラクタ
    public AdapterLab(BaseClass baseclass){
        this.baseclass = baseclass;
    }


    // 幅を返す。処理自体は委譲する。
    public int getHaba(){
        return baseclass.getWidth();
    }

    // 高さを返す。処理自体は委譲する。
    public int getTakasa(){
        return baseclass.getHeight();
    }
}

Adapterクラスでは既存クラスとは異なるインタフェースを提供する。
処理自体は既存クラスで行う。


ExecLab.java(実行用ドライバ)

package gof;

public class ExecLab {

	public static void main(String[] args) {
		
		// 既存のクラスを生成する
        BaseClass cls = new BaseClass(100, 50);

        // アダプタクラスを生成する
        AdapterLab rAdapter = new AdapterLab(cls);
        
        // アダプタクラスのメソッドを使用する
        System.out.println(rAdapter.getTakasa());

	}
}