分類

結構型模式。

這個模式在解決什麼

外觀模式要解決的是「底層系統太複雜,客戶端不該知道那麼多細節」的問題。當一個操作需要調用很多類、很多接口,而且這套流程還會被反覆使用時,就適合用一個對外的簡化入口把它包起來。

核心做法

建立一個外觀類,對外提供少量高層接口。客戶端只需要調用這些高層接口,而外觀類內部再去協調多個子系統完成整套工作。

換句話說,外觀模式不是消滅底層複雜度,而是把複雜度收在一個地方。

什麼時候適合用

下面這些情況很典型:

  • 同一套複雜操作會被很多地方重複使用
  • 客戶端不應直接依賴過多子系統
  • 想提供一個更高層、更穩定的調用入口

例子

假設系統中有一個「啟動」流程,它其實依賴了 N 個類中的 M 個接口。若沒有外觀模式,每個需要啟動功能的調用者都得自己知道這整套細節。

而有了外觀類之後,客戶端只要調用像 StartUp() 這樣的一個方法即可,真正的細節組裝都留在外觀類內部。

類圖

這一篇先記住的重點

  • 外觀模式的價值在於簡化入口,而不是重做底層系統
  • 它適合拿來封裝重複使用的複雜流程
  • 客戶端因此可以減少對多個子系統的直接依賴

參考書目

《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates