## 設計模式的解析與活用 - ch19 # Template Method --- ## Agenda - Template Method 意圖 - Template Method 減少重複與實務經驗 - Template Method 關鍵特徵 --- ## 意圖 定義一個操作中的演算法的骨架,將一些步驟延遲到子類別中,不改變演算法的結構而重新定義他的步驟 白話文:也就是抽象類別擷取共通的部分,將差異點封裝在衍生類別,Template Method 就是控制不同過程中的相同處流程 --- ## 類似的流程 - 使用複製貼上導致重複,邏輯異動容易漏改,變化也難維護(組合爆炸) - query 範例 ![](https://i.imgur.com/IcBPxH2.png) --- ## 建議修改流程 - 比較程式碼,找出重複片段,進行重構 - 使用 Extract 方法 - 建立基礎類別,保留不會變的部分 - 如果一開始設計就注意到,是可以避免走到重構步驟,透過不斷實踐可以加強下次遇到提早做好規劃 - 重構時不要加新功能 - 妥善運用模式,達到維護品質,並且不會增加工作量 --- ## 關鍵特徵 ![](https://i.imgur.com/CrcLafJ.png) --- ## 其他參考 - [做飲料為例](https://corrupt003-design-pattern.blogspot.com/2016/07/template-method-pattern.html) - [蓋房子為例](https://refactoring.guru/design-patterns/template-method) ![](https://refactoring.guru/images/patterns/diagrams/template-method/live-example-2x.png) --- ## 問題與討論 - Template Method 模式的意圖是在不改變演算法的結構前提,重新定義他的步驟,這是什麼意思? - 為什麼此章節介紹的模式命名取為 Template Method? - Strategy 模式與 Template Method 模式有何差異? --- ## 備忘 - 此模式整理出一個流程,在不改變演算內涵的前提,僅把相同、重複的片段定義在父類別,不同的片段提取至子類別處理,執行順序仍不會變 - 已經有一個「樣板流程」,一但有新的類別要加入,只要根據差異處去實作子類別的函示,整體流程仍是比照已完成的樣板的定義 - Strategy vs Template Method 後者,處理類似但是不相同的過程,聚焦在有關聯性的過程。 前者,處理相同目的但實作過程不同的模式
{"metaMigratedAt":"2023-06-17T17:25:06.326Z","metaMigratedFrom":"YAML","title":"Template Method","breaks":true,"slideOptions":"{\"theme\":\"beagi\",\"transition\":\"slide\"}","contributors":"[{\"id\":\"4920227a-8d5d-43bf-a64c-f92a0ab5021e\",\"add\":1675,\"del\":387}]"}
    158 views