模板方法模式C++

當(dāng)我們要完成在某一細(xì)節(jié)層次一致的一個過程或一系列步驟,但其個別步驟在更詳細(xì)的層次上的實現(xiàn)可能不同時,通常考慮用模板方法模式來處理。

模版方法模式,就是定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模版方法使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

模板方法模式結(jié)構(gòu)圖

image

模板方法模式基本代碼

#include <iostream>
using namespace std;

class AbstractClass {
// 抽象類,其實就是一個抽象模板,定義并實現(xiàn)了一個模板方法。
// 這個模板方法一般是一個具體方法,給出了一個頂級邏輯的骨架,而邏輯的組成步驟在相應(yīng)的抽象操作中,推遲到了子類實現(xiàn)。
// 頂級邏輯也可能調(diào)用一些具體的方法。
public:
    void TemplateMethod() { // 模板方法,給出了邏輯骨架,而邏輯的組成是一些相應(yīng)的抽象操作,推遲到子類實現(xiàn).
        PrimitiveOperation1();
        PrimitiveOperation2();
    }
    virtual void PrimitiveOperation1() = 0;
    virtual void PrimitiveOperation2() = 0; // 一些抽象行為,放到子類實現(xiàn)
    virtual ~AbstractClass() {}
};

class ConcreteClassA : public AbstractClass {
// ConcreteClass實現(xiàn)父類所定義的一個或多個抽象方法。
// 每個AbstractClass都可以有任意多個ConcreteClass與之對應(yīng),
// 而每一個ConcreteClass都可以給出這些抽象方法的不同實現(xiàn),從而使得頂級邏輯的實現(xiàn)各不相同。
public:
    void PrimitiveOperation1() {
        cout << "ConcreteClassA: PrimitiveOperation1 & ";
    }
    void PrimitiveOperation2() {
        cout << "PrimitiveOperation2" << endl;
    }
};

class ConcreteClassB : public AbstractClass {
public:
    void PrimitiveOperation1() {
        cout << "ConcreteClassB: PrimitiveOperation1 & ";
    }
    void PrimitiveOperation2() {
        cout << "PrimitiveOperation2" << endl;
    }
};

int main() {
    AbstractClass* aa = new ConcreteClassA();
    aa->TemplateMethod(); // ConcreteClassA: PrimitiveOperation1 & PrimitiveOperation2

    AbstractClass* ab = new ConcreteClassB();
    ab->TemplateMethod(); // ConcreteClassB: PrimitiveOperation1 & PrimitiveOperation2

    delete aa;
    delete ab;
    return 0;
}

模版方法模式特點

模板方法模式是通過把不變的行為搬到父類,去除子類中的重復(fù)代碼來體現(xiàn)它的優(yōu)勢,提供了很好的代碼復(fù)用平臺。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 場景問題# 1.1 登錄控制## 幾乎所有的應(yīng)用系統(tǒng),都需要系統(tǒng)登錄控制的功能,有些系統(tǒng)甚至有多個登錄控制的功...
    七寸知架構(gòu)閱讀 2,052評論 3 53
  • 【學(xué)習(xí)難度:★★☆☆☆,使用頻率:★★★☆☆】直接出處:模板方法模式梳理和學(xué)習(xí):https://github.co...
    BruceOuyang閱讀 845評論 0 2
  • 設(shè)計模式匯總 一、基礎(chǔ)知識 1. 設(shè)計模式概述 定義:設(shè)計模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 4,094評論 1 15
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評論 18 399
  • 分鏡一: 早晨7:00的鬧鐘響起(鏡頭從鬧鐘到日歷再到人,鬧鐘一直響著),大三學(xué)生小麥掙扎著坐起,寢室已經(jīng)空無一人...
    反正我們也不趕時間閱讀 498評論 0 0

友情鏈接更多精彩內(nèi)容