在模板模式(template pattern)中,乙個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。
意圖:定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
主要解決:一些方法通用,卻在每乙個子類都重新寫了這一方法。
何時使用:有一些通用的方法。
如何解決:將這些通用演算法抽象出來。
關鍵**:在抽象類實現,其他步驟在子類實現。
應用例項: 1、在造房子的時候,地基、走線、水管都一樣,只有在建築的後期才有加壁櫥加柵欄等差異。 2、西遊記裡面菩薩定好的 81 難,這就是乙個頂層的邏輯骨架。 3、spring 中對 hibernate 的支援,將一些已經定好的方法封裝起來,比如開啟事務、獲取 session、關閉 session 等,程式設計師不重複寫那些已經規範好的**,直接丟乙個實體就可以儲存。
優點: 1、封裝不變部分,擴充套件可變部分。 2、提取公共**,便於維護。 3、行為由父類控制,子類實現。
缺點:每乙個不同的實現都需要乙個子類來實現,導致類的個數增加,使得系統更加龐大。
使用場景: 1、有多個子類共有的方法,且邏輯相同。 2、重要的、複雜的方法,可以考慮作為模板方法。
我們將建立乙個定義操作的 game 抽象類,其中,模板方法設定為 final,這樣它就不會被重寫。cricket 和 football 是擴充套件了 game 的實體類,它們重寫了抽象類的方法。
templatepatterndemo,我們的演示類使用 game 來演示模板模式的用法。
步驟 1
建立乙個抽象類,它的模板方法被設定為 final。
public
abstract
class game
}
步驟 2
建立擴充套件了上述類的實體類。
public
class
cricket
extends
game
@override
void initialize()
@override
void startplay()
}
public
class
football
extends
game
@override
void initialize()
@override
void startplay()
}
步驟 3
使用 game 的模板方法 play() 來演示遊戲的定義方式。
用父類去控制行為.子類實現行為.
public
class templatepatterndemo
}
關鍵在於:父類控制行為,子類實現具體行為 這段話.
士兵類:
/**
*@classname: soldier
*@description: abstract class soldier
*@author zhangdi
*/public
abstract
class
soldier
//穿戴裝備
void wearequipment()
abstract
void weararms();//裝配兵器
abstract
void fight();//作戰
}
步兵類:
/**
*@classname: infantry
*@description: 步兵
*@author zhangdi
*/public
class
infantry
extends
soldier
@override
void fight()
}
弓箭手類:
/**
*@classname: archer
*@description: 弓箭手
*@author zhangdi
*/public
class
archer
extends
soldier
@override
void fight()
}
測試類:
public
class soldiertest
}
輸出結果:
士兵統一穿戴防具..
步兵裝配長矛..
步兵衝鋒...
--------------------
士兵統一穿戴防具..
弓箭手裝配弓箭..
弓箭手放箭...
參考: 模板設計模式 設計模式 模板方法模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...
模板設計模式 設計模式之模板模式
模板模式,通常又叫做模板方法模式,乙個抽象類公開定義了執行方法的模板,它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方法進行,這種型別的設計模式屬於行為型模式。模板模式主要解決將通用的演算法抽象起來,同樣的 邏輯出現了重複,就可以使用模板模式進行重構。關鍵 在抽象類實現,其他步驟在子類實現...
設計模式 模板設計模式
1 抽象類 abstractclass類中實現了模板方法 template 定義了演算法的骨架,具體子類需要去實現,抽象方法operationr2,3,4 template operationr2,3,4可以是抽象方法,也可以是實現方法 如果是抽象方法,需要到子類實現即可 2 實現類 concret...