模板方法模式 Template

2021-08-31 14:06:36 字數 2263 閱讀 9626

模板方法模式:在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法中的某些步驟。

當我們要完成在某一細節層次一致的乙個過程或一系列步驟,但其個別步驟在更詳細的層次上的實現可能不同時,我們通常考慮用模板方法模式來處理.

鉤子(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...