Adapterパターン

Head First デザインパターンのメモ。

Adapterパターン

クラスのインターフェースをクライアントが期待する別のインターフェースに変換します。
アダプタは互換性のないインターフェースのためにそのままでは連携できないクラスを連携させます。

2つの形式

オブジェクトアダプタとクラスアダプタの2つの形式がある。
クラスアダプタには多重継承が必要で、コンポジションを使う代わりにサブクラス化する。

Adapterパターン実装

// 鴨インターフェース
public interface Duck() {
    public void quack();
    public void fly();
}

// 七面鳥インターフェース
public interface Turkey() {
    public void gobble();
    public void fly();
}

// 七面鳥クラスがDuckと同じインターフェースを持つようにアダプタを作成
public class TurkeyAdapter implements Duck {
    Turkey turkey;
    public TurkeyAdapter(Turkey turkey) {
        this.turkey = turkey
    }
    public void quack() {
        turkey.gobble();
    }
    public void fly() {
        for (int i=0; i < 5; i++) {
            turkey.fly();
        }
    }
}