模板方法模式

2021-09-22 13:26:22 字數 1672 閱讀 5657

一、簡介

模板方法模式就是定義乙個演算法骨架,而將演算法骨架中的一些步驟延伸到子類中去,使得子類可以不改變乙個演算法的結構,即可重新定義該演算法的某些特定步驟。這裡需要復用的是演算法的結構,也就是步驟,而步驟的實現可以在子類中完成。

模板方法特點如下:

模板方法模式的組成

模板方法模式的類圖如下:

二、示例

父類角色:

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

com.templatemothed;

public

class

test

}

呼叫template 從父類繼承的concretetemplate()方法,concretetemplate()方法就會呼叫子類實現的step1()和step2()方法。這樣step1()與step2()方法的執行順序已經在父類中定義好了,子類執行實現這兩個方法。當呼叫父類的模板方法的時候,這兩個方法就會按照父類模板方法定義的流程依次執行。

模板方法模式在許多開源框架中得到應用。如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 ...