码迷,mamicode.com
首页 > 其他好文 > 详细

【设计模式】模板方法模式

时间:2014-05-26 20:19:20      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:style   c   class   blog   code   java   

 

模板方法模式

 

一个父类【运动会】类

两个子类,一个【CClass1】类,一个【CClass2】类,班级类是运动会类的子类,父类制定了运动会的流程(算法的逻辑架构),子类分别去实现流程中的具体实现。

子类不需要重写流程,只需要重写流程中每一项的具体内容。

以此为例,流程就是先干什么、后干什么、再干什么,而每一项就是分别干的内容。

 

 

bubuko.com,布布扣
/************************************************************************
设计模式
模板方法模式

模板方法的大概思想是:父类指定某种流程或规则,每个子类在为该流程制定详细的工作。

下面demo以运动会为例,上学的时候开运动会的日子还是比较开心的,因为不用上课。
运动会总是有一定的流程的,比如每个有班级进场、团队展示、运动员比赛、写稿子
等等。

************************************************************************/

//【运动会】类
class CSportsMeeting
{
public:
    CSportsMeeting(string strClassName);
    virtual ~CSportsMeeting();
    virtual void Jinchang() = 0;  //进场
    virtual void Zhanshi() = 0;   //展示,子类去重写这两个虚函数的实现

    //运动会流程,子类不需要重写此函数,这个函数指定了流程和逻辑框架
    void SportsSchedule();        

protected:
    string m_strClassName;  //班级名
};

CSportsMeeting::CSportsMeeting(string strClassName) : m_strClassName(strClassName){}
CSportsMeeting::~CSportsMeeting(){}
void CSportsMeeting::SportsSchedule()
{
    //进场
    Jinchang();

    //展示
    Zhanshi();
}
bubuko.com,布布扣

 

 

 

bubuko.com,布布扣
//【班级1类】
class CClass1 : public CSportsMeeting
{
public:
    CClass1(string strClassName);
    virtual ~CClass1();
    virtual void Jinchang();
    virtual void Zhanshi(); 
};

CClass1::CClass1(string strClassName) : CSportsMeeting(strClassName){}
CClass1::~CClass1(){}
void CClass1::Jinchang()
{
    cout << "班级 " <<m_strClassName<<" 进场啦,哈哈\r\n";
}

void CClass1::Zhanshi()
{
    cout << "班级 " << m_strClassName<<" 展示啦,我们是风骚型的啦!\r\n";
}

//////////////////////////////////////////////////////////////////////////

//【班级2类】
class CClass2 : public CSportsMeeting
{
public:
    CClass2(string strClassName);
    virtual ~CClass2();
    virtual void Jinchang();
    virtual void Zhanshi(); 
};

CClass2::CClass2(string strClassName) : CSportsMeeting(strClassName){}
CClass2::~CClass2(){}

void CClass2::Jinchang()
{
    cout << "班级 "<<m_strClassName<< " 进程啦,都看过来!\r\n";
}

void CClass2::Zhanshi()
{
    cout << "班级 "<<m_strClassName<<" 展示啦,我们是呆萌型的,么么哒!\r\n";
}
bubuko.com,布布扣

 

 

 客户端代码

客户端用子类去实例化每个具体的类,然后将指针赋值给父类指针,父类指针去调用父类的未重写的函数SportsShedule,在此函数中调用的函数为被子类重写了虚函数。

bubuko.com,布布扣
int _tmain(int argc, _TCHAR* argv[])
{
    CSportsMeeting* pSport = new CClass1("三年二班");
    pSport->SportsSchedule();

    cout<<endl<<endl;

    CSportsMeeting* pSport2 = new CClass2("高三四班");
    pSport2->SportsSchedule();


    cout<<endl<<endl;

    return 0;
}
bubuko.com,布布扣

 

 

 

 执行结果如下

bubuko.com,布布扣

 

 

 

  

【设计模式】模板方法模式,布布扣,bubuko.com

【设计模式】模板方法模式

标签:style   c   class   blog   code   java   

原文地址:http://www.cnblogs.com/cuish/p/3751799.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!