1、模板方法模式的作用
想象一下泡茶和衝咖啡的過程:
泡茶:1. 煮開水;2. 開啟茶包;3. 將茶包放入開水中;4. 加入蜂蜜;
重咖啡:1. 煮開水;2. 開啟咖啡包;3. 使用開水衝咖啡;4. 加入白糖;
如果現在要你來實現程式,執行這兩個過程。你要怎麼做呢?最簡單直接的做法:
class
coffee
public
void
boilwater()
public
void
brewcoffeegrinds()
public
void
pourincup()
public
void
addsugarandmilk()
}class
teapublic
void
boilwater()
public
void
steepteabag()
public
void
addlemon()
public
void
pourincup()
}
2、使用模板方法實現
但我們知道,泡茶和衝咖啡兩個過程具有很高的相似性,而且咖啡和茶也具有一定的相似性,我們可以使用模板方法設計模式來實現上面這兩個過程:
abstract
class
caffeinebeverage
public
void
boilwater()
public
abstract
void
brew()
;public
void
pourincup()
public
abstract
void
addcondiments()
;}class
tea1
extends
caffeinebeverage
@override
public
void
addcondiments()
}class
coffee1
extends
caffeinebeverage
@override
public
void
addcondiments()
}
在這裡,void preparerecipe()
就是模板方法,它是乙個模板,定義了某些事物進行的過程。它所呼叫的方法並不是都是已經實現的,這些未實現的抽象方法,根據子類的不同,由子類進行實現。
我們來總結一下:模板方法定義了某些事物執行過程的框架,裡面的具體步驟可以由子類來進行實現。
3.、模板方法的另一種用法
我們的模板方法出了進行一些必要的步驟,還可以加入hook()
方法。hook()
方法一般有預設的實現,子類可以選擇是否進行重寫。
abstract
class
caffeinebeverage
}public
void
boilwater()
public
abstract
void
brew()
;public
void
pourincup()
public
void
addcondiments
(condiments)
;public
boolean
customerwantcondiment()
}
模板設計模式 PHP設計模式之模板方法模式
模板方法模式,也是我們經常會在不經意間有會用到的模式之一。這個模式是對繼承的最好詮釋。當子類中有重複的動作時,將他們提取出來,放在父類中進行統一的處理,這就是模板方法模式的最簡單通俗的解釋。就像我們平時做專案,每次的專案流程實都差不多,都有調研 開發 測試 部署上線等流程。而具體到每個專案中,這些流...
設計模式之模板方法設計模式
父類抽象出子類共有的方法,子類實現各自不同的業務。總之就是一種行為有他們共同的方法,只是他們具體的實現不一樣。比如開車這種行為模式,啟動 換擋 踩油門。每種型號品牌的車都有共同的行為,但是不同型號品牌的車的實現方式可能不同,需要每個品牌型號的車自己實現這些功能。這樣的定義上面行為的模式,稱之為模板方...
設計模式之模板方法模式
定義 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟 型別 行為類模式 事實上,模板方法是程式設計中乙個經常用到的模式。比如,給定乙個整數陣列,把陣列中的數由大到小順序,然後把排序之後的結果列印出來。這個需求大體可以分為兩部分,...