一、簡介
模板方法模式就是定義乙個演算法骨架,而將演算法骨架中的一些步驟延伸到子類中去,使得子類可以不改變乙個演算法的結構,即可重新定義該演算法的某些特定步驟。這裡需要復用的是演算法的結構,也就是步驟,而步驟的實現可以在子類中完成。
模板方法特點如下:
模板方法模式的組成
模板方法模式的類圖如下:
二、示例
父類角色:
1子類角色:package
com.templatemothed;23
/**4
* 父類角色5*/
6public
abstract
class
abstracttemplate
1617
/**18
* 步驟一,需要子類去實現
19*/
20public
abstract
void
step1();
2122
/**23
* 步驟
二、需要子類去實現
24*/
25public
abstract
void
step2();
26 }
1呼叫類:package
com.templatemothed;23
/**4
* 子類角色5*/
6public
class concretetemplate extends
abstracttemplate
1415
/**16
* 實現父類的模板方法中的步驟二方法
17*/
18public
void
step2()
21 }
package呼叫template 從父類繼承的concretetemplate()方法,concretetemplate()方法就會呼叫子類實現的step1()和step2()方法。這樣step1()與step2()方法的執行順序已經在父類中定義好了,子類執行實現這兩個方法。當呼叫父類的模板方法的時候,這兩個方法就會按照父類模板方法定義的流程依次執行。com.templatemothed;
public
class
test
}
模板方法模式在許多開源框架中得到應用。如spring framework中對事務的相關處理就使用到了模板方法模式。spring對jpa,hibernate,jdbc都提供了支援。 abstractplatformtransactionmanager 用到了模板方法設計模式,許多具體的資料庫層繼承了該類(如datasourcetransactionmanager、hibernatetransactionmanager等)。該類將各個具體的相關的**抽象出來。進行資料庫操作的時候,首先會獲取事務,然後進行資料庫操作,最後按照資料操作的結果,選擇進行事務提交或是回滾。這些事務的獲取,事務的提交,與回滾都是在子類(如果datasourcetransactionmanager、hibernatetransactionmanager這些類)中去實現的。
模板方法模式
有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...
模板方法模式
模板方法模式 定義乙個演算法框架,將裡面的操作步驟推遲到子類中去執行,這樣使得子類不用改變框架,只需改變某些操作步驟方法 ifndef test h define test h include include using namespace std class test virtual test v...
模板方法模式
模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟。還可以使用鉤子對可選部分進行判斷。include include using namespace std class caffeinebeverage ...