首页 > 代码库 > 【设计模式】模板方法模式
【设计模式】模板方法模式
模板方法模式
一个父类【运动会】类
两个子类,一个【CClass1】类,一个【CClass2】类,班级类是运动会类的子类,父类制定了运动会的流程(算法的逻辑架构),子类分别去实现流程中的具体实现。
子类不需要重写流程,只需要重写流程中每一项的具体内容。
以此为例,流程就是先干什么、后干什么、再干什么,而每一项就是分别干的内容。
/************************************************************************
设计模式
模板方法模式
模板方法的大概思想是:父类指定某种流程或规则,每个子类在为该流程制定详细的工作。
下面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();
}
//【班级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";
}
客户端代码
客户端用子类去实例化每个具体的类,然后将指针赋值给父类指针,父类指针去调用父类的未重写的函数SportsShedule,在此函数中调用的函数为被子类重写了虚函数。
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;
}
执行结果如下
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。