这个模式就是利用了面向对象的多态,抽象哪些公用的方法,就不用实现了,其他的按照业务逻辑来独自实现。
等到调用就ok了
今天只能上代码了
- // TemplateMethod.cpp : 定义控制台应用程序的入口点。
- //
- //************************************************************************/
- /* @filename TemplateMethod.cpp
- @author wallwind
- @createtime 2012/10/22 23:30
- @function 模板方法模式
- @email wochenglin@qq.com
- */
- /************************************************************************/
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- class FuncBase
- {
- public:
- FuncBase(){}
- virtual ~FuncBase(){}
- virtual void doOneStep()=0;
- //virtual void doTwoStep()=0;
- virtual void doThreeStep()=0;
- void process()
- {
- doOneStep();
- //doTwoStep();
- if (m_hook)
- {
- doThreeStep();
- }
- }
- void setHook(bool hook)
- {
- m_hook =hook;
- }
- private:
- bool m_hook;
- };
- class FuncBussOne :public FuncBase
- {
- public:
- FuncBussOne(){}
- ~FuncBussOne(){}
- virtual void doOneStep()
- {
- cout<<"FuncBussOne:doOneStep"<<endl;
- }
- //virtual void doTowStep()
- //{
- // cout<<"FuncBussOne:doTowStep"<<endl;
- //}
- virtual void doThreeStep()
- {
- cout<<"FuncBussOne:doThreeStep"<<endl;
- }
- };
- class FuncBussTwo :public FuncBase
- {
- public:
- FuncBussTwo(){}
- virtual ~FuncBussTwo(){}
- virtual void doOneStep()
- {
- cout<<"FuncBussTwo:doOneStep"<<endl;
- }
- //virtual void doTowStep()
- //{
- // cout<<"FuncBussTwo:doTowStep"<<endl;
- // }
- virtual void doThreeStep()
- {
- cout<<"FuncBussTwo:doThreeStep"<<endl;
- }
- };
- int _tmain(int argc, _TCHAR* argv[])
- {
- FuncBase * f;
- f= new FuncBussOne;
- f->setHook(true);
- f->process();
- cout<<"---------"<<endl;
- f=new FuncBussTwo;
- f->setHook(false);
- f->process();
- delete f;
- return 0;
- }