模板方法模式是一種行為型設計模式。其思想是:將部分邏輯以具體方法的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯,不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。
模板方法模式涉及到2個角色:
具體模板(concrete template):
結構圖:
具體**實現:
public
abstract
class
abstracttemplate
}public
class
concretetemplatea
extends
abstracttemplate
@override
public
void
abstractmethod2()
}public
class
concretetemplateb
extends
abstracttemplate
@override
public
void
abstractmethod2()
}// 測試
class templatetest
}
執行結果:
method 1 a另外,模板中除了模板方法和抽象方法外,還有一種稱為鉤子的方法。鉤子方法常常由抽象類給出乙個空實現作為此方法的預設實現。這種空的鉤子方法叫做「do nothing hook」。顯然,這種預設鉤子方法與預設適配模式的思路是一樣的,這樣具體模板類就不必實現所有的鉤子,因為有些鉤子其實是用不上的。鉤子方法的命名應當以method 2 a
do
開頭,例如,在httpservlet
類中,doget()
、dopost()
等就是這樣命名的。
這裡,我們使用模板方法模式將策略模式帖子裡例子再實現一遍。
// 抽象賬單
public
abstract
class
abstractbill
protected
abstract
double
cost(); // 此方法由具體模板實現
// 模板方法:計算最後總價
public
final
double
finalbill()
}// 非會員賬單
public
class
commonbill
extends
abstractbill
}// 會員賬單
public
class
vipbill
extends
abstractbill
}public
class
counter
public
void
showbill()
}// 測試
class countertest
}
執行結果:
the final bill costs 880.000000結構圖:
可以看到,在策略模式
的例子裡,如果我們把抽象策略介面和提供公共方法抽象類二合為一,得到的**結構與本例十分相似。但是,那並不是模板方法模式,因為當中並沒有提供模板方法。
更多關於策略模式與模板方法模式的區別,可以參考這篇博文:
《模板方法模式、策略模式 的 聯絡、區別和應用場景》 - 賽艇隊長 -
設計模式 模板方法模式 Java
模板方法模式 template 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。舉個栗子 小明想在學習過後去運動或者上會網,那麼小明在學習某門課程過後一定會搞點事情,而這些事情是可變化的,誰也不知道他要幹什麼,所以...
java設計模式 模板方法模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。準備乙個抽象類,將部分邏輯以具體方法的形式實現,然後宣告一些抽象方法交由子類實現剩餘邏輯,有鉤子方法給予...
java設計模式 模板方法模式
模板方法模式是乙個使用非常廣泛的設計模式,比較簡單,它主要是定義乙個操作中的演算法框架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。我們這裡以不同的人的每天來舉例 首先定義乙個類,類中定義了 起床getup 洗漱washing 生活方式process...