【设计模式】模板方法模式
2014-05-25 22:57
190 查看
模板方法模式
一个父类【运动会】类
两个子类,一个【CClass1】类,一个【CClass2】类,班级类是运动会类的子类,父类制定了运动会的流程(算法的逻辑架构),子类分别去实现流程中的具体实现。
子类不需要重写流程,只需要重写流程中每一项的具体内容。
以此为例,流程就是先干什么、后干什么、再干什么,而每一项就是分别干的内容。
客户端代码
客户端用子类去实例化每个具体的类,然后将指针赋值给父类指针,父类指针去调用父类的未重写的函数SportsShedule,在此函数中调用的函数为被子类重写了虚函数。
执行结果如下
一个父类【运动会】类
两个子类,一个【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; }
执行结果如下
相关文章推荐
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
- 设计模式学习笔记(十六)——Template Method模板方法模式
- 设计模式笔记 13. TemplateMethod 模板方法模式(行为型模式)
- 设计模式之模板方法模式(Template Method)
- 设计模式学习之 模板方法模式
- 深入浅出Java模式设计之模板方法模式
- 设计模式学习笔记(十六)——Template Method模板方法模式
- 设计模式——模板方法模式(TemplateMethod)
- 深入浅出Java模式设计之模板方法模式
- 设计模式学习日志(14)-TemplateMethod模板方法(行为型模式)
- 设计模式 - Template Method Pattern(模板方法模式)
- 设计模式系列漫谈之六 - 模板方法模式
- 设计模式笔记(十五) —— 模板方法模式
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
- 设计模式(七)[模板方法(Template Method)模式]
- 第六个设计模式之:模板方法
- 浅析设计模式之模板方法
- 设计模式一模板方法模式(spring)
- 白话设计模式--行为型模式--Template Method模式(模板方法模式)
- 设计模式(1)- 模板方法 Template Method Pattern