定義
模板方法模式 (template method)定義了乙個操作中的演算法的骨架,而將部分步驟的實現在子類中完成。
模板方法模式使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
模板方法模式是所有模式中最為常見的幾個模式之一,是基於繼承的**復用的基本技術。,沒有關聯關係。
因此,在模板方法模式的類結構圖中,只有繼承關係。
模板方法模式需要開發抽象類和具體子類的設計師之間的協作。乙個設計師負責給出乙個演算法的輪廓和骨架,另一些設計師則負責給出這個演算法的各個邏輯步驟。
代表這些具體邏輯步驟的方法稱做基本方法(primitive method);而將這些基本方法彙總起來的方法叫做模板方法(template method),這個設計模式的名字就是從此而來。
結構
圖-模板方法模式結構圖
abstractclass: 抽象類,定義並實現乙個模板方法。這個模板方法定義了演算法的骨架,而邏輯的組成步驟在相應的抽象操作中,推遲到子類去實現。頂級邏輯也有可能呼叫一些具體方法。
abstract
class abstractclass
}
concreteclass: 實現實現父類所定義的乙個或多個抽象方法。
class concreteclassa
extends abstractclass
@override
public
void primitiveoperation2()
}
class concreteclassb
extends abstractclass
@override
public
void primitiveoperation2()
}
測試**
public
class templatemethodpattern
}
要點
模板方法模式中的三類角色
1、具體方法(concrete method)
2、抽象方法(abstract method)
3、鉤子方法(hook method)
三類角色的關聯
在模板方法模式中,首先父類會定義乙個演算法的框架,即實現演算法所必須的所有方法。
其中,具有共性的**放在父類的具體方法中。
各個子類特殊性的**放在子類的具體方法中。但是父類中需要有對應抽象方法宣告。
鉤子方法可以讓子類決定是否對演算法的不同點進行掛鉤。
總結
使用模板方法模式可以將**的公共行為提取,以達到復用的目的。
而對於特殊化的行為在子類中實現。父類的模板方法可以控制子類中的具體實現。
子類無需了解整體演算法框架,只需實現自己的業務邏輯即可。
例項
模板方法模式應用場景十分廣泛。
在 《head first》的模板方法模式章節裡列舉了乙個十分具有代表性的例子。
現實生活中,茶和咖啡是隨處可見的飲料。沖泡一杯茶或沖泡一杯咖啡的過程是怎樣的?
我們來整理一下流程。
泡茶:
燒開水 ==> 沖泡茶葉 ==> 倒入杯中 ==> 新增檸檬
泡咖啡:
燒開水 ==> 沖泡咖啡 ==> 倒入杯中 ==> 新增糖和牛奶
由以上處理步驟不難發現,準備這兩種飲料的處理過程非常相似。我們可以使用模板類方法去限定製作飲料的演算法框架。
其中相同的具有共性的步驟(如燒開水、倒入杯中),直接在抽象類中給出具體實現。
而對於有差異性的步驟,則在各自的具體類中給出實現。
抽象類
abstract
class beverage }//
共性操作,直接在抽象類中定義
public
void boilwater()
//共性操作,直接在抽象類中定義
public
void pourincup()
//鉤子方法,決定某些演算法步驟是否掛鉤在演算法中
public
boolean customwantscondiments()
//特殊操作,在子類中具體實現
public
abstract
void brew();
//特殊操作,在子類中具體實現
public
abstract
void addcondiments();
}
具體類
class tea
extends beverage
@override
public
void addcondiments()
}class coffee
extends beverage
@override
public
void addcondiments()
}
測試**
public
static
void main(string args)
執行結果
**********=== 準備茶 **********===
燒開水沖泡茶葉
倒入杯中
新增檸檬
**********=== 準備咖啡 **********===
燒開水沖泡咖啡豆
倒入杯中
新增糖和牛奶
設計模式 模板方法模式 Java
模板方法模式 template 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。舉個栗子 小明想在學習過後去運動或者上會網,那麼小明在學習某門課程過後一定會搞點事情,而這些事情是可變化的,誰也不知道他要幹什麼,所以...
java設計模式 模板方法模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。準備乙個抽象類,將部分邏輯以具體方法的形式實現,然後宣告一些抽象方法交由子類實現剩餘邏輯,有鉤子方法給予...
JAVA設計模式 模板方法模式
模板方法模式是一種行為型設計模式。其思想是 將部分邏輯以具體方法的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯,不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。模板方法模式涉及到2個角色 具體模板 concrete template 結構圖 具體 實現 publi...