Dyuichi Blog

オブジェクト指向シリーズⅣ: デザインパターン [⑮ Facade]

概要

facadeは日本語で「建物の正面」という意味になる.Facadeパターンは,一連の複雑なサブシステムに対して,一つに統一されたインターフェースを与えるパターンである.

Facadeパターンにより,クライアント側はどのサブシステムのを使うかや,動作順序などを意識する必要がなくなる.

Facadeパターンの主な要素は以下である.

  • Subsystem:サブシステムの機能を実装したクラス
  • Facade:サブシステムの機能を簡略化したインターフェースを提供し,クライアントからの要求をサブシステム内の適当なオブジェクトに委譲したクラス

クラス図

画像が読み込まれない場合はページを更新してみてください。

実装例(Java)

java// Subsystem
class SubsystemA {
    public void operationA() {
        System.out.println("Subsystem operationA");
    }
}

class SubsystemB {
    public void operationB() {
        System.out.println("Subsystem operationB");
    }
}

class SubsystemC {
    public void operationC() {
        System.out.println("Subsystem operationC");
    }
}

// Facade
class Facade {
    private SubsystemA subsystemA;
    private SubsystemB subsystemB;
    private SubsystemC subsystemC;
    public Facade() {
        subsystemA = new SubsystemA();
        subsystemB = new SubsystemB();
        subsystemC = new SubsystemC();
    }
    public void operation() {
        subsystemA.operationA();
        subsystemB.operationB();
        subsystemC.operationC();
    }
}

// Client
public class FacadePattern {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.operation();
    }
}

まとめ,所感

Laravelを使っていたとき,FacadeとFactoryを用いてダミーデータを生成していたので,非常に助かった記憶にある.

特定のダミーデータ生成を一つのサブシステムとみなし,Facadeはローカル環境用とステージング環境用などに実装し,クライアントからはその環境に合わせて使用するFacadeの選択を行ったりしていた.

知らず知らずのうちにFacadeパターンを使っていたので,非常に理解しやすい.他のパターンも実際に使っていきたい.