c++设计模式七,模板方法模式

来源:互联网 发布:mmd动作数据下载极乐 编辑:程序博客网 时间:2024/06/06 05:10

模板模式也是相当简单的一种模式,而且是比较常用的。模板模式是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

上代码:

hummermodel.h //基类

#ifndef HUMMERMODEL_H#define HUMMERMODEL_Hclass CHummerModel{public:    CHummerModel(void);    virtual ~CHummerModel(void);    void Run();protected:    virtual void Start() = 0;    virtual void Stop() = 0;    virtual void Alarm() = 0;    virtual void EngineBoom() = 0;    virtual bool IsAlarm();};#endif // HUMMERMODEL_H
hummermodel.cpp
#include "hummermodel.h"#include <iostream>using std::cout;using std::endl;CHummerModel::CHummerModel(void){}CHummerModel::~CHummerModel(void){}void CHummerModel::Run(){    //先发动汽车    Start();    //引擎开始轰鸣    EngineBoom();    //然后就开始跑了,跑的过程中遇到一条狗挡路,就按喇叭    if (IsAlarm())        Alarm();    //到达目的地就停车    Stop();}bool CHummerModel::IsAlarm(){    //钩子方法,默认喇叭是会响的    return true;}

hummerh1model.h

#ifndef HUMMERH1MODEL_H#define HUMMERH1MODEL_H#include "hummermodel.h"class CHummerH1Model :    public CHummerModel{public:    CHummerH1Model(void);    ~CHummerH1Model(void);    void SetAlarm(bool tag);    void Start();    void Stop();    void Alarm();    void EngineBoom();    bool IsAlarm();private:    bool m_isAlarm;};#endif // HUMMERH1MODEL_H
hummerh1model.cpp
#include "hummerh1model.h"#include <iostream>using std::cout;using std::endl;CHummerH1Model::CHummerH1Model(void){    m_isAlarm = true;}CHummerH1Model::~CHummerH1Model(void){}void CHummerH1Model::Start(){    cout << "悍马H1发动..." << endl;}void CHummerH1Model::Stop(){    cout << "悍马H1停车..." << endl;}void CHummerH1Model::Alarm(){    cout << "悍马H1鸣笛" << endl;}void CHummerH1Model::EngineBoom(){    cout << "悍马H1引擎声音是这样...." << endl;}bool CHummerH1Model::IsAlarm(){    return this->m_isAlarm;}void CHummerH1Model::SetAlarm( bool tag ){    this->m_isAlarm = tag;}
hummerh2model.h
#ifndef HUMMERH2MODEL_H#define HUMMERH2MODEL_H#include "hummermodel.h"class CHummerH2Model :    public CHummerModel{public:    CHummerH2Model(void);    ~CHummerH2Model(void);    void Start();    void Stop();    void Alarm();    void EngineBoom();    bool IsAlarm();};#endif // HUMMERH2MODEL_H
hummerh2model.cpp
#include "hummerh2model.h"#include <iostream>using std::cout;using std::endl;CHummerH2Model::CHummerH2Model(void){}CHummerH2Model::~CHummerH2Model(void){}void CHummerH2Model::Start(){    cout << "悍马H2发动..." << endl;}void CHummerH2Model::Stop(){    cout << "悍马H2停车..." << endl;}void CHummerH2Model::Alarm(){    cout << "悍马H2鸣笛" << endl;}void CHummerH2Model::EngineBoom(){    cout << "悍马H2引擎声音是这样...." << endl;}bool CHummerH2Model::IsAlarm(){    return false;}
main.cpp
#include "HummerModel.h"#include "HummerH1Model.h"#include "HummerH2Model.h"#include <crtdbg.h>int main(int argc, char* argv[]){    //客户开着H1型号,出去遛弯了    CHummerModel *ph1 = new CHummerH1Model();    ph1->Run();    delete ph1;    //客户开H2型号,出去玩耍了    CHummerModel *ph2 = new CHummerH2Model();    ph2->Run();    delete ph2;    //客户开着H1型号,出去遛弯了,并且不让喇叭响    CHummerH1Model *ph11 = new CHummerH1Model();    ph11->SetAlarm(false);    ph11->Run();    delete ph11;    _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF);    _CrtDumpMemoryLeaks();    return 0;}
运行结果:



原创粉丝点击