模板方法模式,又叫模板模式。在乙個抽象類中公開定義了執行它的方法的模板,它的子類可以按需重寫方法實現,但呼叫將以抽象類中定義的方式進行。
簡單說,模板模式定義了乙個操作中的演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構,就可以重定義該演算法的某些特定步驟。
這種型別的設計模式屬於行為型模式。
模板方法模式的原理類圖:
案例編寫製作豆漿的程式,說明如下:
思路分析
**實現
1
//抽象類,表示豆漿
2public
abstract
class
soyamilk
1112
//選材料
13void
select
()16
17//新增不同的配料
18abstract
void
addcondiments();
1920
//浸泡
21void
soak
()24
25void
beat
()28
29}
1
public
class
redbeansoyamilk
extends
soyamilk
6}
1
public
class
peanutsoymilk
extends
soyamilk
6}
1
public
class
client
10}
在模板方法模式的父類中,我們可以定義乙個方法,它預設不做任何事,子類可以視情況要不要覆蓋它,該方法稱為「鉤子」。
1
//抽象類,表示豆漿
2public
abstract
class
soyamilk
10 soak();
11 beat();
12 }
1314
//選材料
15void
select
()18
19//新增不同的配料
20abstract
void
addcondiments();
2122
//浸泡
23void
soak
()26
27void
beat
()30
31//鉤子方法,決定是否需要新增配料
32boolean
customerwantcondiments
()35}
1
public
class
puresoyamilk
extends
soyamilk67
@override
8boolean
customerwantcondiments
()11}
基本思想是:演算法只存在於乙個地方,也就是在父類中,容易修改。需要修改演算法時,只要修改父類的模板方法或者已經實現的某些步驟,子類就會繼承這些修改。
實現了最大化**復用。父類的模板方法和已實現的某些步驟會被子類繼承而直接使用。
既統一了演算法,也提供了很大的靈活性。父類的模板方法確保了演算法的結構保持不變,同時由子類提供部分步驟的實現。
該模式的不足之處:每乙個不同的實現都需要乙個子類實現,導致類的個數增加,使得系統更加龐大。
一般模板方法都加上final關鍵字,防止子類重寫模板方法。
模板方法模式使用場景:當要完成在某個過程,該過程要執行一系列步驟,這一系列的步驟基本相同,但其個別步驟在實現時可能不同,通常考慮用模板方法模式來處理。
模板設計模式 PHP設計模式之模板方法模式
模板方法模式,也是我們經常會在不經意間有會用到的模式之一。這個模式是對繼承的最好詮釋。當子類中有重複的動作時,將他們提取出來,放在父類中進行統一的處理,這就是模板方法模式的最簡單通俗的解釋。就像我們平時做專案,每次的專案流程實都差不多,都有調研 開發 測試 部署上線等流程。而具體到每個專案中,這些流...
設計模式之模板方法設計模式
父類抽象出子類共有的方法,子類實現各自不同的業務。總之就是一種行為有他們共同的方法,只是他們具體的實現不一樣。比如開車這種行為模式,啟動 換擋 踩油門。每種型號品牌的車都有共同的行為,但是不同型號品牌的車的實現方式可能不同,需要每個品牌型號的車自己實現這些功能。這樣的定義上面行為的模式,稱之為模板方...
設計模式之模板方法模式
定義 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟 型別 行為類模式 事實上,模板方法是程式設計中乙個經常用到的模式。比如,給定乙個整數陣列,把陣列中的數由大到小順序,然後把排序之後的結果列印出來。這個需求大體可以分為兩部分,...