類圖
定義
要求一個子系統的外部與其內部的通信必須通過一個統一的對象進行。門面模式提供
一個高層次的接口,使得子系統更易於使用
優點
- 減少系統的相互依賴。所有的依賴都是對門面對象的依賴,與子系統無關。
- 提高了靈活性。不管子系統內部如何變化,只要不影響門面對象,任你自由活動缺點
- 不符合開閉原則:對修改關閉,對擴展開放
使用場景
- 爲一個複雜的模塊或子系統提供一個供外界訪問的接口
- 子系統相對獨立——外界對子系統的訪問只是黑箱操作即可
- 預防低水平人員帶來的風險擴散
子系統A
public class ClassA {
public void doSomethingA() {
// 業務邏輯
System.out.println("ClassA->doSomethingA()");
}
}
子系統B
public class ClassB {
public void doSomethingB() {
// 業務邏輯
System.out.println("ClassB->doSomethingB()");
}
}
子系統C
public class ClassC {
public void doSomethingC() {
// 業務邏輯
System.out.println("ClassC->doSomethingC()");
}
}
外觀對象
public class Facade {
// 被委託的對象
private ClassA a = new ClassA();
private ClassB b = new ClassB();
private ClassC c = new ClassC();
// 提供給外部訪問的方法
public void methodA() {
this.a.doSomethingA();
}
public void methodB() {
this.b.doSomethingB();
}
public void methodC() {
this.c.doSomethingC();
}
}
場景類
public class Client {
public static void main(String[] args) {
// 新建外觀類
Facade facade = new Facade();
// 執行外觀類方法,實際執行子系統的方法
facade.methodA();
facade.methodB();
facade.methodC();
}
}