模板法模式:定義乙個操作中的演算法骨架。而將一些步驟延遲到子類中。
依照《headfirst 設計模式》的樣例。煮茶和煮咖啡的演算法框架(流程)是一樣的。僅僅是有些演算法的實現是不一樣的,有些是一樣的。
我們能夠將共同的演算法框架封裝為乙個虛基類,將同樣的演算法宣告為不可覆蓋的(static)。不同的演算法宣告為子類要實現的純虛函式。
能夠使用hook()函式處理演算法框架的細小差異。
看到這裡,也許會想起策略模式。
策略模式也是將能夠改變的演算法和不輕易改變的演算法差別對待,但策略模式和模板方法模式的最根本差別是:
策略模式是採用類組合,將不變的演算法仍保留在原來類中。僅僅是將要過載的演算法單獨封裝為乙個虛基類,子類實現自己的版本號,這樣原來的類就
能夠組合不同的介面子類。呼叫不同的演算法。
模板方法模式是採用類繼承,將演算法框架(步驟)封裝為乙個虛基類,並且演算法框架是不可覆蓋的,子類僅僅能對個別步驟有不同的實現。基類也能夠引入hook()函式來對演算法框架微調。hook()鉤子函式的原理非常easy,基類的hook()函式能夠定義為空,也能夠定義一些操作,子類能夠對基類的hook()函式進行過載。
以下是不帶hook()鉤子的模板方法模式:
class caffeinebeverage //咖啡因飲料
void boilwater()
virtual void brew() = 0;
void pourincup()
virtual void addcondiments() = 0;
};class coffee : public caffeinebeverage
void addcondiments() };
class tea : public caffeinebeverage
void addcondiments() };
int main(void)
C 設計模式 模板模式 Template模式
有許多模式都和模板模式非常相似,用的都是相同的手法。將變化的部分延遲到子類中實現 模板方法模式是設計模式行為型中最簡單的一種設計模式。在實際中你甚至可能經常用到,只是你自己不知道它是一種設計模式罷了 include using namespace std 抽象模板 class template vi...
C 設計模式 template 模板方法模式
模板法模式 定義乙個操作中的演算法骨架,而將一些步驟延遲到子類中。按照 headfirst 設計模式 的例子,煮茶和煮咖啡的演算法框架 流程 是一樣的,只是有些演算法的實現是不一樣的,有些是一樣的。我們可以將共同的演算法框架封裝為乙個虛基類,將相同的演算法宣告為不可覆蓋的 static 不同的演算法...
設計模式 模板模式(Template)
定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟 定義了乙個或多個抽象操作,以便讓子類實現,這些操作叫做基本操作 定義並實現了乙個模板方法,這個模板方法一般是乙個具體方法,它給出了乙個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽...