一、概念
將算法通用部分抽象出來,延遲到子類實現
1.1、定義
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
Template.png
Template,模板抽象類:定義算法執行順序,和算法通用部分
ConcreteTemplete ,具體算法類:實現算法異動部分
模板模式實現關鍵:在于如何抽象出通用部分,按照設定好步驟的執行順序。
1.2、解決的問題
問題分析:實際開發中存在這樣一種情況,執行過程都是劃分幾個固定步驟,然后依序執行;但是,實際執行人不同,導致的結果也不同。例如蓋房子、裝修房子等等,都是按照特定工序一步步往下依序執行。
模式的解決思路:將算法執行過程,抽象剝離為幾個步驟,然后按照一定順序執行。即一個抽象類公開定義了執行它的方法的方式/模板,具體的執行延遲到模板子類完成。
二、模式的應用和優缺點
2.1、應用場景
- 實例:
1、spring 中對 Hibernate 的支持,將一些已經定好的方法封裝起來,比如開啟事務、獲取 Session、關閉 Session 等,程序員不重復寫那些已經規范好的代碼,直接丟一個實體就可以保存。
2、軟件開發的項目管理過程:需求評審/分析/設計 - 開發-測試-發布等等。
2.2、優缺點
優點:
1、提取公共代碼,提高代碼復用率
2、具體細節步驟實現定義在子類中,子類定義詳細處理算法是不會改變算法整體結構缺點:
每一個不同的實現都需要一個子類來實現,導致類的個數增加,使得系統更加龐大。