當時還不知道自己用的是個模式,只是覺得非常好。很給力。所以,今天學起來很有感受。
這個模式就是利用了面向對象的多態,抽象哪些公用的方法,就不用實現了,其他的按照業務邏輯來獨自實現。
等到調用就ok了
今天只能上代碼了
[cpp]
// TemplateMethod.cpp : 定義控制台應用程序的入口點。
//
//************************************************************************/
/* @filename TemplateMethod.cpp
@author wallwind
@createtime 2012/10/22 23:30
@function 模板方法模式
@email [email protected]
*/
/************************************************************************/
#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;
}
運行結果
其中process 是父類獨有的有的。而其他方法可以根據具體類,具體自己怎麼設計了,但是其邏輯過程是不變的。