1、作用
做一件是的方法很多,但做這件都可以歸納為幾個步驟。這個時候可以使用模板模式,在模板類中,定義做事的步驟,將多種實現做事的細節延遲到子類中去實現。
即:定義乙個操作中的演算法的骨架(模板函式),而將一些步驟延遲到子類中(基本函式)。模板方法使得子類可以不改變乙個演算法的結構(模板函式)即可重定義該演算法的實現方式(基本函式)。
開閉原則:對修改關閉、對擴充套件開發
依賴倒置(dip dependency inversion principle):高層次模組不依賴與低層次模組(呼叫模組不依賴於被呼叫模組的修改和擴充套件,如果被呼叫模組是基於抽象類開發,那麼呼叫模組只要基於抽象類呼叫即可。這樣就出現了依賴倒置,即具體的類要依賴於抽象的類來實現,而不是抽象類或者呼叫模組依賴於被呼叫模組)。依賴倒置的原則就是:子類依賴於抽象基類實現,呼叫模組依賴於抽象基類呼叫,這樣隔離了呼叫模組與具體實現的子類的依賴。(要求抽象基類定義的很好)
2、實現方式
比如做菜都分3個步驟:洗菜、切菜、炒菜。
但是做不同的菜每個步驟的細節不一樣,這個時候就可以使用模板模式,在模板類(cook)中,將這三個步驟定義為純虛函式(基本函式)、同時實現乙個final的模板函式呼叫基本函式(洗菜、切菜、炒菜這三個順序是固定的)。在實現炒不同菜的時候都通過繼承這個模板,並根據每個菜的特定實現洗菜、切菜、炒菜三個基本函式。通過模板擴充套件可以實現炒不同的菜、且有乙個統一的介面,方便擴充套件、使用和維護。
這裡將模板函式定義為public的,而基本函式定義為protected的只用於給模板函式呼叫。
//封裝不可變部分:模板函式 擴充套件可變部分:基本函式
class potatofloss : public
dodishtemplate
void cut() override
void cook() override
};class tomatowitheggs : public
dodishtemplate
void cut() override
void cook() override
};#endif
test.cc
#inlcude "輸出:dodishtemplate.h
"int
main()
模板 Template 模式
模板 template 模式 模板模式是類的行為模式。1.定義 定義乙個操作中演算法的骨架 或稱為頂級邏輯 將一些步驟 或稱為基本方法 的執行延遲到其子類中.2.模板模式與繼承 模板方法估計恰當地使用繼承。此模式可以用來改寫一些擁有相同功能的相關的類,將可復用的一般性行為 移到基類裡面,而把特殊化的...
Template模板模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式 優缺點優點 1 封裝不變部分,擴充套件可變部分。2 提取公共 便於維護。3 行為由父類控制,子類實現。缺...
設計模式 模板模式(Template)
定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟 定義了乙個或多個抽象操作,以便讓子類實現,這些操作叫做基本操作 定義並實現了乙個模板方法,這個模板方法一般是乙個具體方法,它給出了乙個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽...