#ifndef __template_method_h__
#define __template_method_h__
#include //【說明】
// 模板方法模式是所有模式中最為常見的幾個模式之一,是基於繼承的**復用的基本技術。
// 模板方法是乙個具體方法,它給出了乙個頂層邏輯框架,而邏輯的組成步驟在抽象類中可以是具體方法,也可以是抽象方法。
// 模板方法模式的核心是抽象類和其中的模板方法的設計。子類可以置換掉父類的可變部分,但是子類卻不可以改變模板方法所代表的頂級邏輯。
//【定義】
// 模板方法模式:在父類中定義流程處理的框架,在子類中實現具體的處理。
//【角色】
// 1) abstractclass(抽象模板):在抽象類中定義了一系列基本操作,每乙個基本操作對應演算法的乙個步驟,在其子類中可以重定義或實現這些步驟。
// 同時,在抽象類中實現了乙個模板方法,用於定義乙個演算法的框架。
// 2) concreteclass(具體子類):它是抽象類的子類,用於實現在父類中宣告的抽象基本操作以完成子類特定演算法的步驟。
//【意義】
// 封裝不變部分,擴充套件可變部分。把認為不變部分的演算法封裝到父類中實現,而可變部分的則可以通過繼承來繼續擴充套件。
// 模板方法可以使邏輯處理通用化,提取公共部分**,便於維護。
// 按照設計習慣,抽象類負責宣告最抽象、最一般的事物屬性和方法,實現類負責完成具體的事務屬性和方法,但是模板方式正好相反,子類執行的結果影響了父類的結果,會增加**閱讀的難度。
//【示例】
//抽象模板,負責定義抽象方法和通用處理流程
class abstractdisplay
virtual ~abstractdisplay()
public:
virtual int open() = 0; //基本方法
virtual void play() = 0;
virtual void close() = 0;
void display(); //模板方法
};//具體物件,負責實現抽象方法
class audiodisplay : public abstractdisplay
;//具體物件,負責實現抽象方法
class videodisplay : public abstractdisplay
;//客戶端
void testtemplatemethod();
#endif
#include "templatemethod.h"
void abstractdisplay::display()
else }
audiodisplay::audiodisplay(const std::string & name)
int audiodisplay::open()
void audiodisplay::play()
void audiodisplay::close()
int videodisplay::open()
void videodisplay::play()
void videodisplay::close()
videodisplay::videodisplay(const std::string & name)
void testtemplatemethod()
C 設計模式 模板方法模式
模板方法模式 應用廣泛的模式 一 意圖 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法結構即可重定義該演算法的某些特定步驟。二 作用 三 使用技巧 先抽象出乙個類,寫出一些抽象行為放到子類中實現,寫乙個模板方法,推遲到子類實現。四 特點 優點 不用再抄一...
《C 設計模式》 模板方法模式
模板方法模式 提到模板我們經常會想到簡歷模板 ppt模板等,以簡歷模板為例,不同的人可以使用一樣的簡歷模板,在填充內容時根據自己的名字 工作經歷等填寫自己的內容,從而形成不同的簡歷。在oo中模板方法模式和現實中的模板十分相似,首先要有乙個封裝了不可變部分的抽象類 簡歷的大致結構,都有姓名 性別 年齡...
C 設計模式 模板方法模式
定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。一些方法通用,卻在每乙個子類都重新寫了這一方法。關鍵 在抽象類實現,其他步驟在子類實現。優點缺點 封裝不變的部分,擴充套件可變部分 每乙個不同的實現都需要乙個子類來實現,導致類...