一、概念
將算法通用部分抽象出來(lái),延遲到子類(lèi)實(shí)現(xiàn)
1.1、定義
定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類(lèi)中。模板方法使得子類(lèi)可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

Template,模板抽象類(lèi):定義算法執(zhí)行順序,和算法通用部分
ConcreteTemplete ,具體算法類(lèi):實(shí)現(xiàn)算法異動(dòng)部分
模板模式實(shí)現(xiàn)關(guān)鍵:在于如何抽象出通用部分,按照設(shè)定好步驟的執(zhí)行順序。
1.2、解決的問(wèn)題
問(wèn)題分析:實(shí)際開(kāi)發(fā)中存在這樣一種情況,執(zhí)行過(guò)程都是劃分幾個(gè)固定步驟,然后依序執(zhí)行;但是,實(shí)際執(zhí)行人不同,導(dǎo)致的結(jié)果也不同。例如蓋房子、裝修房子等等,都是按照特定工序一步步往下依序執(zhí)行。
模式的解決思路:將算法執(zhí)行過(guò)程,抽象剝離為幾個(gè)步驟,然后按照一定順序執(zhí)行。即一個(gè)抽象類(lèi)公開(kāi)定義了執(zhí)行它的方法的方式/模板,具體的執(zhí)行延遲到模板子類(lèi)完成。
二、模式的應(yīng)用和優(yōu)缺點(diǎn)
2.1、應(yīng)用場(chǎng)景
- 實(shí)例:
1、spring 中對(duì) Hibernate 的支持,將一些已經(jīng)定好的方法封裝起來(lái),比如開(kāi)啟事務(wù)、獲取 Session、關(guān)閉 Session 等,程序員不重復(fù)寫(xiě)那些已經(jīng)規(guī)范好的代碼,直接丟一個(gè)實(shí)體就可以保存。
2、軟件開(kāi)發(fā)的項(xiàng)目管理過(guò)程:需求評(píng)審/分析/設(shè)計(jì) - 開(kāi)發(fā)-測(cè)試-發(fā)布等等。
2.2、優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1、提取公共代碼,提高代碼復(fù)用率
2、具體細(xì)節(jié)步驟實(shí)現(xiàn)定義在子類(lèi)中,子類(lèi)定義詳細(xì)處理算法是不會(huì)改變算法整體結(jié)構(gòu)缺點(diǎn):
每一個(gè)不同的實(shí)現(xiàn)都需要一個(gè)子類(lèi)來(lái)實(shí)現(xiàn),導(dǎo)致類(lèi)的個(gè)數(shù)增加,使得系統(tǒng)更加龐大。