用代码和UML图化解设计模式之《模板方法模式》
当时还不知道自己用的是个模式,只是觉得非常好。很给力。所以,今天学起来很有感受。
这个模式就是利用了面向对象的多态,抽象哪些公用的方法,就不用实现了,其他的按照业务逻辑来独自实现。
等到调用就ok了
今天只能上代码了
[cpp]
// 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;
}
运行结果
其中process 是父类独有的有的。而其他方法可以根据具体类,具体自己怎么设计了,但是其逻辑过程是不变的。
补充:软件开发 , C++ ,