Adapter パターンAdvertisementクラスの橋渡し
クラスのインタフェースを変更したいが、クラスそのものは変更したくない場合や、互換性のないクラスに関係を持たせたい場合に有効。継承、もしくは委譲を使用してアダプタクラスを作成する。
特徴異なる環境に対応させるために、仲介者を用意する。(例)外部とのインタフェースがUSBだけのパソコンで、PS/2のマウスを使用したい。そこで変換用コネクタを使用する。外部とのインタフェースがUSBだけのパソコン
class UsbComputer{
useUsb(){}
}
変換用コネクタ(仲介者)。PS/2マウスを使用する。
class Connecter extends UsbComputer{
usePS2(){
super.useUsb();
}
}
サンプルコード
既存のクラス
class RectInfo{
private int width;
private int height;
// 幅と高さを設定
public RectInfo(int w, int h){
width = w;
height = h;
}
// 幅を返す
public int getWidth(){
return width;
}
// 高さを返す
public int getHeight(){
return height;
}
}
アダプタクラス
class RectInfoAdapter{
private RectInfo rectinfo;
public RectInfoAdapter(RectInfo rectinfo){
this.rectinfo = rectinfo;
}
// 幅を返す。処理自体は委譲する。
public int getYoko(){
return rectinfo.getWidth();
}
// 高さを返す。処理自体は委譲する。
public int getTakasa(){
return rectinfo.getHeight();
}
}
Main
public class Main{
public static void main(String args[]){
// 既存のクラスを生成する
RectInfo rInfo = new RectInfo(100, 50);
// アダプタクラスを生成する
RectInfoAdapter rAdapter = new RectInfoAdapter(rInfo);
// 既存のクラスのメソッドを使用する
System.out.println("rInfo.getWidth() : " + rAdapter.getWidth());
System.out.println("rInfo.getHeight() : " + rAdapter.getHeight());
// アダプタクラスのメソッドを使用する
System.out.println("rAdapter.getYoko() : " + rAdapter.getYoko());
System.out.println("rAdapter.getTakasa() : " + rAdapter.getTakasa());
}
}
実行結果
rInfo.getWidth() : 100 rInfo.getHeight() : 50 rAdapter.getYoko() : 100 rAdapter.getTakasa() : 50 クラス図
Advertisement |
ショートカット・634・634ブログ ・このカテゴリのトップページに戻る ・Incubator(Pukiwiki) ・634ラボ UIコレクションギャラリー ZO-3ジェネレーター サイト検索Y!ログール |