
Facade 模式:讓複雜系統變簡單
Facade 模式在多個子系統外建立一層統一入口,讓使用者不需要理解複雜流程就能完成操作。
classDiagram class OrderFacade { -inventory : InventoryManager -payment : PaymentProcessor -shipping : ShippingService +placeOrder(productId, amount, address) Result } class InventoryManager { +checkStock(productId) boolean } class PaymentProcessor { +processPayment(amount) boolean } class ShippingService { +arrangeShipping(address) boolean } OrderFacade --> InventoryManager OrderFacade --> PaymentProcessor OrderFacade --> ShippingService note for OrderFacade "統一入口\n隱藏子系統複雜度"
使用情境
- 訂單流程:庫存、付款、物流整合。
- 第三方 API 整合:多套 API 封裝成一致入口。
- 大型系統分層:減少使用端對子系統細節的依賴。
實作範例

class InventoryManager {
checkStock(productId) {
console.log(`Checking stock for product: ${productId}`);
return true;
}
}
class PaymentProcessor {
processPayment(amount) {
console.log(`Processing payment: $${amount}`);
return true;
}
}
class ShippingService {
arrangeShipping(address) {
console.log(`Arranging shipping to: ${address}`);
return true;
}
}
class OrderFacade {
constructor() {
this.inventory = new InventoryManager();
this.payment = new PaymentProcessor();
this.shipping = new ShippingService();
}
placeOrder(productId, amount, address) {
if (!this.inventory.checkStock(productId)) {
return { success: false, message: 'Out of stock' };
}
if (!this.payment.processPayment(amount)) {
return { success: false, message: 'Payment failed' };
}
this.shipping.arrangeShipping(address);
return { success: true, message: 'Order placed successfully' };
}
}
const orderSystem = new OrderFacade();
orderSystem.placeOrder('PROD-001', 99.99, '台北市信義區');優點
- 對外介面簡潔
- 降低子系統耦合
- 使用端學習成本低
缺點
- Facade 可能逐漸膨脹
- 修改子系統可能影響 Facade