facadeは日本語で「建物の正面」という意味になる.Facadeパターンは,一連の複雑なサブシステムに対して,一つに統一されたインターフェースを与えるパターンである.
Facadeパターンにより,クライアント側はどのサブシステムのを使うかや,動作順序などを意識する必要がなくなる.
Facadeパターンの主な要素は以下である.
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パターンを使っていたので,非常に理解しやすい.他のパターンも実際に使っていきたい.