Facade パターン

「Facade」という英単語は、「建物の正面」を意味します。

このパターンは、複雑な内部処理(データベース処理・業務処理etc)を隠蔽し、利用者にシンプルなインタフェースを提供するパターンです。また、複雑なAPI呼出しの適切な実行順を利用者に意識させないという目的もあります。


役割り

1. Facade(正面)
複雑な処理を構成している「ClassA・B・C・D」のシンプルなインタフェースを提供します。各々のオブジェクトのメソッドを適切な順番・使い方で呼出します。
2. ClassA・B・C・D(各処理)
各々が担当している処理を行います。「Facade」から呼出されて処理を行いますが、その事は意識しませんし、逆に「Facade」を呼出す事もしません。
3. Client(依頼者)
「Facade」が提供するメソッドを呼出し処理を行います。

▲PageTop

クラス図

Facadeパターンのクラス図

Facadeパターン クラス図

▲PageTop

サンプル

ソースコード

1. Facade.java

public class Facade {
    public void facadeMethod(){
        (new ClassA()).methodA();
        (new ClassB()).methodB();
        (new ClassC()).methodC();
        (new ClassD()).methodD();
    }
}

2-1. ClassA.java

public class ClassA {
    public void methodA(){
        System.out.println("ClassA-mA()");
    }
}

2-2. ClassB.java

public class ClassB {
    public void methodB(){
        System.out.println("ClassB-mB()");
    }
}

2-3. ClassC.java

public class ClassC {
    public void methodC(){
        System.out.println("ClassC-mC()");
    }
}

2-4. ClassD.java

public class ClassD {
    public void methodD(){
        System.out.println("ClassD-mD()");
    }
}

3. Client.java

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

実行結果

C:\sample\desin_pattern\facade>javac Client.java [Enter]

C:\sample\desin_pattern\facade>java Client [Enter]
ClassA-mA()
ClassB-mB()
ClassC-mC()
ClassD-mD()
        

▲PageTop