c++ 實現模板方法模式

來源:互聯網
上載者:User

模板方法模式(Template Method):定義一個操作中的演算法的骨架,而將一些方法實現延遲到子類。模板方法使得子類可以不改變一個演算法的結構即可以重定義該演算法的某些特定步驟。

         通俗一點講,假設一個類或者演算法實現需要調用函數f1、f2、f3,調用的順序確定,為f1,f2,f3,但是對於不同的類,不同的演算法,f1、f2、f3的實現過程會有不同;

那麼模板方法怎麼解決問題的呢?

首先,定義一個函數將f1、f2、f3按確定的順序封裝起來,並將該函數定義為virtual 函數;其次,將函數f1、f2、f3定義為pure virtual,函數f1、f2、f3的具體實現過程由子類來完成;最後,基類由於定義pure virtual函數而成為抽象類別,但是基類定義了演算法或者函數的調用過程(及程式架構),衍生類別繼承基類,實現pure virtual 函數f1、f2、f3從而完成,衍生類別都有相同的執行過程,但是每個過程的細節自己定義。

#include<iostream>#include<string>using namespace std;class GameCharacter{public:virtual int healthCalculate();virtual void doBefore() = 0;virtual void doAfter() = 0;virtual void calculate() = 0;};int GameCharacter::healthCalculate(){doBefore();//具體操作過程calculate();doAfter();return 1;//此處僅僅是為了程式設計之便,無特殊含義}class EvilBadGuy : public GameCharacter{public:void doBefore();void doAfter();void calculate();};void EvilBadGuy::calculate(){cout << "EvilBadGuy calculate process " << endl;}void EvilBadGuy::doBefore(){cout << "EvilBadGuy do before function " << endl;}void EvilBadGuy::doAfter(){cout << "EvilBadGuy do after function" << endl;}class Angel : public GameCharacter{public:void doBefore();void doAfter();void calculate();};void Angel::calculate(){cout << "Angel calculate process " << endl;}void Angel::doBefore(){cout << "Angel do before function " << endl;}void Angel::doAfter(){ cout << "Angel do after function " << endl;}int main(int argc, char **argv){GameCharacter *ev = new EvilBadGuy;ev->healthCalculate();GameCharacter *angel = new Angel;angel->healthCalculate();delete ev;delete angel;system("pause");return 0;}

參考資料:

1、《大話設計模式》

2、《effective c++》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.