1. 定義
提供一個統一的接口,用來訪問子系統中的一羣接口,這個高層接口使得子系統更容易使用。
2. 角色
- Facade:外觀類
- SubSystem:子系統類
3. 特點
- 優點:實現了客戶和子系統的鬆耦合關係,客戶通過外觀類來對子系統進行操作,因此子系統內部的修改不會影響客戶的使用。
- 缺點:該模式對客戶訪問子系統類增加了許多限制,降低了系統的靈活性,當增加子系統時,可能需要修改外觀類和客戶的源代碼,違反了開閉原則。
4. 示例
Restaurant:
public class Restaurant {
private Waiter waiter;
private Cooker cooker;
private Cashier cashier;
public Restaurant() {
waiter = new Waiter();
cooker = new Cooker();
cashier = new Cashier();
}
public void doWork() {
waiter.doWork();
cooker.doWork();
cashier.doWork();
}
}
Waiter:
public class Waiter {
public void doWork() {
System.out.println("點餐");
}
}
Cooker:
public class Cooker {
public void doWork() {
System.out.println("烹飪中");
}
}
Cashier:
public class Cashier {
public void doWork() {
System.out.println("結賬");
}
}
測試類:
public class TestFacade {
public static void main(String[] args) {
Restaurant restaurant = new Restaurant();
restaurant.doWork();
}
}
// 輸出
// 點餐
// 烹飪中
// 結賬
參考:
1. 《Head First 設計模式》
2. 《圖說設計模式》https://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/facade.html