模板模式通過乙個抽象類來定義需要實現的框架,通過一系列的抽象方法,將方法延遲到子類去實現。相當於對乙個程式建立一套模板,子類可以根據自身需要,按照模板的要求進行功能上的填充和擴充套件。
1.如果我們想炒一道菜,可以用抽象類定義好一系列的模板方法,如加鹽–>爆炒–>上菜:
abstract
class
cook
}
2.建立乙個子類,表示做紅燒肉,繼承模板類,並根據自身需要實現做紅燒肉的方法:
class
hongshaorou
extends
cook
@override
void
salt()
@override
void
cook()
@override
void
finish()
}
3.建立另乙個子類,表示做雞蛋湯,繼承模板類,並提供做雞蛋湯的方法:
class
eggsoup
extends
cook
@override
void
salt()
@override
void
cook()
@override
void
finish()
}
4.客戶類,通過多型呼叫抽象類的模板方法:
public
class
template
}
5.執行結果:
開始炒菜
做紅燒肉
加10g鹽
爆炒10分鐘
起鍋結束
*************************==
開始炒菜
做雞蛋湯
加2g鹽
煮5分鐘
起鍋結束
上面的案例我們通過定義乙個炒菜的抽象類,規定一系列需要執行的模板方法,最後再在其子類中延遲實現模板方法,就可以實現各類菜品都按照炒菜的流程走,但每個菜品的實現細節又有所不同,這就是模板模式的特點。
模板模式優缺點(參考:
優點:
缺點:
應用:
在並發包中aqs類(abstractqueuedsynchronizer)中,裡面的tryacquire、tryrelease方法就是乙個模板方法,需要由子類繼承實現:
模板設計模式 PHP設計模式之模板方法模式
模板方法模式,也是我們經常會在不經意間有會用到的模式之一。這個模式是對繼承的最好詮釋。當子類中有重複的動作時,將他們提取出來,放在父類中進行統一的處理,這就是模板方法模式的最簡單通俗的解釋。就像我們平時做專案,每次的專案流程實都差不多,都有調研 開發 測試 部署上線等流程。而具體到每個專案中,這些流...
設計模式之模板方法設計模式
父類抽象出子類共有的方法,子類實現各自不同的業務。總之就是一種行為有他們共同的方法,只是他們具體的實現不一樣。比如開車這種行為模式,啟動 換擋 踩油門。每種型號品牌的車都有共同的行為,但是不同型號品牌的車的實現方式可能不同,需要每個品牌型號的車自己實現這些功能。這樣的定義上面行為的模式,稱之為模板方...
設計模式之模板方法模式
定義 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟 型別 行為類模式 事實上,模板方法是程式設計中乙個經常用到的模式。比如,給定乙個整數陣列,把陣列中的數由大到小順序,然後把排序之後的結果列印出來。這個需求大體可以分為兩部分,...