設計模式的解析與活用 - ch6 === # Facade 模式 --- ## Agenda - 認識 Facade 模式 - 問題情境 - Facade 模式的特徵 - Facade 模式的變體 - 問題與討論 --- ## Facade 模式 定義了更高層次的介面,讓子系統變得更容易使用 --- ## 問題情境 - 思路與好處 1. 專案內的使用手冊堆積如山 2. 透過新介面,不用完整摸透內部複雜系統 3. 將客戶與子系統隔離 --- ## 關鍵特徵 - 意圖:簡化原系統使用方式,需定義自己介面 - 問題:只會用複雜系統的子集,或要特別方式存取系統 - 解決方式:在原系統上提供一個新介面 - 參與者:提供簡化介面,讓系統更容易使用 - 效果:除了達到簡易使用,同時也無法使用完整系統功能 - 實作上: - 定義一個或多個所需介面的新類別 - 讓新類別使用原本系統 --- ## Facade 模式概念圖 ![](https://i.imgur.com/EW49qLm.png) --- ## 簡化呼叫所需物件數量 ![image](https://www.oreilly.com/library/view/design-patterns-explained/0201715945/0201715945_ch06lev1sec4_image01.gif) [ref: Design Patterns Explained](https://www.oreilly.com/library/view/design-patterns-explained/0201715945/0201715945_ch06lev1sec4.html) [ref: origin book ch6.](https://www.pearsonhighered.com/assets/samplechapter/0/3/2/1/0321247140.pdf ) --- ## 模式提供了通用方法 - 模式只是可以作為起點的藍圖,並非完全原樣照搬 - Facade 模式下可以新增方法,但目的仍是簡化原本流程 --- ## 封裝背後的原因 1. 追蹤系統的使用情況:將對系統的存取都改為使用 Facade,達成監控 2. 改換系統:預期未來會更換系統,將原系統設為 Facade 類別的 private member,期望降低之後轉換的成本 --- ## 小結:Facade 模式適用情境 - 希望封裝或隱藏原系統 - 希望使用原本系統,也想加新功能 - 降低團隊成員學習成本,或維護成本 --- 問題與討論
{"metaMigratedAt":"2023-06-16T21:38:32.846Z","metaMigratedFrom":"YAML","title":"設計模式的解析與活用 - ch6","breaks":true,"slideOptions":"{\"theme\":\"beagi\",\"transition\":\"slide\"}","contributors":"[{\"id\":\"4920227a-8d5d-43bf-a64c-f92a0ab5021e\",\"add\":1566,\"del\":339}]"}
    480 views