模板方法模式:在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法中的某些步驟。
當我們要完成在某一細節層次一致的乙個過程或一系列步驟,但其個別步驟在更詳細的層次上的實現可能不同時,我們通常考慮用模板方法模式來處理.
鉤子(hook):是一種被宣告在抽象類中的方法,但只有空的或者預設的實現。鉤子的存在,可以讓子類有能力對演算法的不同點進行掛鉤。
要點:1.「模板方法「定義了演算法的步驟,把這些步驟的實現延遲到子類
2.模板方法模式為我們提供了一種**復用的重要技巧
3.模板方法的抽象類可以定義具體方法,抽象方法和鉤子
4.抽象方法由子類實現
5.鉤子是一種方法,它在抽象類中不做事,或者只做預設的事情,子類可以選擇要不要去覆蓋它
6.為了防止子類改變模板方法中的演算法,可以將模板方法宣告為const
7.好萊塢原則告訴我們,將決策權放在高層模組中,以便決定如何以及何時呼叫低層模組
8.策略模式和模板方法模式都封裝演算法,乙個用組合,乙個用繼承
9.工廠方法是模板方法的一種特殊版本
設計原則:
別找我,我會找你,由超類主控一切,當它們需要的時候,自然會去呼叫子類,這就跟好萊塢一樣
[img]
caffeinebeverage.h
#ifndef caffeinebeverage_h
#define caffeinebeverage_h
#include
using namespace std;
class caffeinebeverage
virtual void brew()const=0;
virtual void pourincup()const
virtual void addcondiments()const=0;
//this is a hook
virtual bool needcondiments()
void preparerecipe()}};
#endif // caffeinebeverage_h
coffee.h
#ifndef coffee_h
#define coffee_h
#include "caffeinebeverage.h"
class coffee:public caffeinebeverage
void addcondiments()const
};#endif // coffee_h
#ifndef tea_h
#define tea_h
#include "caffeinebeverage.h"
#include
class tea:public caffeinebeverage
void addcondiments()const
bool needcondiments()
};#endif // tea_h
main.cpp
#include "caffeinebeverage.h"
#include "coffee.h"
#include "tea.h"
int main()
boil water
steeping the tea
pour in cup
need a lemond?y:n
nadding lemond
boil water
dripping coffee through filter
pour in cup
adding sugar
來個簡化版:
class inte***ce
;void method2(){};
void method3(){};
void method4(){};
};class a:public inte***ce
};class model
~model(){}
void run()
private:
inte***ce* m;
};int main()
模板方法模式Template
模板方法模式 在乙個方法中,定義乙個演算法的骨架,而將乙個些步驟延遲到子類中。模板方法使得子類在不改變演算法結構的情況下,重新定義一些演算法中的某些步驟。建立乙個演算法的模板,模板就是乙個方法,在方法中將演算法定義成一組步驟。其中任何步驟都可以是抽象的,由子類負責實現。使得 模板方法本身 和 模板中...
設計模式 模板方法Template
前言 模式總覽 by xingoo 定義乙個類的框架,當它有不同的類時,再具體實現。比如,我們設計乙個跨系統的客戶端軟體,windows需要一套展現類,linux需要一套,mac還需要一套。這樣,只需要抽取他們的共同操作程式設計乙個框架類,具體使用到哪個系統時,再使用對應的類,有點像c 裡面的模板。...
設計模式 模板方法(Template)模式
適用場景 例項分析 1 建立抽象類 由 company 表示,它提供了一套固定的模板方法 recruit 用於標準化演算法的骨架 abstract class.h ifndef abstract class h define abstract class h includeclass company...