在模板模式(template pattern)中,乙個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。
1、有多個子類共有的方法,且邏輯相同。
2、重要的、複雜的方法,可以考慮作為模板方法。
1、抽象模板(abstract template):抽象模板是乙個抽象類。抽象模板定義了若干個方法以表示演算法的各個步驟,這些方法中有抽象方法也有非抽象方法,其中的抽象方法稱為原語操作(primitive operation)。重要的一點是,抽象模板中還定義了乙個稱之為模板方法的方法,該方法不僅包含有抽象模板中表示演算法步驟的方法呼叫,而且也可以包含有定義在抽象模板中的其他物件的方法呼叫,即模板方法定義了演算法的骨架。
2、具體模板(concrete template):具體模板是抽象模板的子類,實現抽象模板中的原語操作。
下圖中,描述了乙個做飯的場景,cook() 方法為模板方法,cooking() 方法和 complete() 方法用於給子類重寫。
上圖中做飯的場景,首先,有乙個抽象方法:
public abstract class cooktemplate
/*** 準備工作
* */
private void prepare()
/*** 開始烹飪
* */
abstract void cooking();
/*** 烹飪完成
* */
abstract void complete();
}
建立兩個子類:
public class bouillitemplate extends cooktemplate
@override
void complete()
}public class souptemplate extends cooktemplate
@override
void complete()
}
建立測試類
1、封裝不變部分,擴充套件可變部分。
2、提取公共**,便於維護。
3、具體模板實現細節不會改變整個演算法的框架。
每乙個不同的實現都需要乙個子類來實現,導致類的個數增加,使得系統更加龐大。
設計模式學習 模板方法模式
型別 行為模式 模板方法模式定義乙個操作中演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些 特定步驟。uml圖 新建賽車的父類 package car package public class car parent public void setsp...
設計模式學習 模板方法模式
1.雜言 設計模式,現在覺得每種模式像工業行業的一些典型零件。這些零件也可以變種出很多類似零件。吧這些零件組合起來,就成了一台機器。好吧,我現在是這麼理解的。一般 結構都是,一層呼叫一層,就是一般都是頂層的呼叫底層的。但模板方法確實反過來的,有父類呼叫子類的方法。這個聽說又牽扯到啥好萊塢原則。對於這...
設計模式學習 模板方法模式
模板方法模式 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟.父類就應該要成為子類的模板,所有重複的 都應該要上公升到父類中,而不是讓每個子類都取重複,重要,複雜的演算法,可以把核心演算法設計為模板方法,周邊的相關細...