既存のクラスのインタフェースを変更したいが、
既存のクラスは変更したくない場合に間に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()); } }