🎯 什麼情境該想到我

當你「面對一個由很多類別組成、關係複雜的子系統,客戶端每次都要認識一堆內部物件、照正確順序呼叫才能完成事情」的時候。你想給他們一個簡單的高階入口,把複雜藏在後面。

⚙️ 怎麼用(步驟 / 公式)

意圖:為子系統中的一組介面提供一個統一的、更高階的介面,讓子系統更容易使用。

主要參與者 / 結構:

  • Facade(外觀):知道哪些子系統類別負責哪些請求,把客戶端的請求轉發/協調給適當的子系統物件。
  • 子系統類別(Subsystem classes):實作真正的功能,處理 Facade 交辦的工作;它們不認識 Facade。
  • Client:透過 Facade 使用子系統,而非直接接觸內部類別。

做法要點:

  1. 找出客戶端最常需要的幾條使用流程。
  2. 建立 Facade 類別,把這些流程封裝成少數幾個簡單方法。
  3. Facade 方法內部負責協調、依序呼叫各子系統物件。
  4. 讓客戶端只依賴 Facade,鬆綁它與子系統之間的耦合。

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 外觀是「提供方便」而非「封鎖」:不應阻止進階使用者在需要時繞過 Facade 直接使用子系統類別。
  • 小心 Facade 膨脹成無所不包的「上帝物件」,把整個系統的邏輯都吸進去。
  • 若子系統本來就單純、客戶端也不多,硬加一層外觀只是多餘的間接。
  • 外觀降低耦合、但不減少子系統的複雜度本身。

🔗 相關工具