Facadeパターン

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

Facadeパターン

サブシステムの一連のインターフェースに対する、統合されたインターフェースを提供します。
ファサードは、サブシステムをより使いやすくする高水準インターフェースを定義します。

Facedeパターン実装

ホームシアターを使って映画を見る場合

public class HomeTheaterFacade {
    Amplifier amp;
    Tuner tuner;
    DvdPlayer dvd;
    // ...省略
    
    public HomeTheaterFacade(Amplifier amp,
        Tuner tuner,
        DvdPlayer dvd,
        // ... 省略
        ) {
        this.amp = amp;
        this.tuner = tuner;
        this.dvd = dvd;
        // ... 省略
    }

    // すべての作業を行うメソッド内に手順をまとめる
    public void watchMovie(String movie) {
        popper.on();
        popper.pop();
        light.dim(10);
        screen.down();
        projector.on();
        projector.wideScreenMode();
        amp.on();
        amp.setDvd(dvd);
        amp.setSurroundSound();
        amp.setVolume(5);
        dvd.on();
        dvd.play(movie);

    }
}

似たようなパータンの目的の違い

Decorator = インターフェースを追加せずに責務を追加する
Adapter = あるインターフェースを別のインターフェースに変換する
Facade = インターフェースをより簡潔にする

最小知識の原則

直接の友達とだけやり取りする

以下に属するメソッドだけを呼び出すべき

  • そのオブジェクト自身
  • メソッドの引数として渡されたオブジェクト
  • メソッドが作成またはインスタンス化するあらゆるオブジェクト
  • そのオブジェクトのあらゆるコンポーネント