用代码和UML图化解设计模式之《模板方法模式》

2014-11-24 09:41:23 · 作者: · 浏览: 1

当时还不知道自己用的是个模式,只是觉得非常好。很给力。所以,今天学起来很有感受。

这个模式就是利用了面向对象的多态,抽象哪些公用的方法,就不用实现了,其他的按照业务逻辑来独自实现。

等到调用就ok了

今天只能上代码了

[cpp]
// TemplateMethod.cpp : 定义控制台应用程序的入口点。
//
//************************************************************************/
/* @filename TemplateMethod.cpp
@author wallwind
@createtime 2012/10/22 23:30
@function 模板方法模式
@email wochenglin@qq.com
*/
/************************************************************************/


#include "stdafx.h"
#include

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"< }

//virtual void doTowStep()
//{
// cout<<"FuncBussOne:doTowStep"< //}

virtual void doThreeStep()
{
cout<<"FuncBussOne:doThreeStep"< }

};


class FuncBussTwo :public FuncBase
{
public:
FuncBussTwo(){}
virtual ~FuncBussTwo(){}

virtual void doOneStep()
{
cout<<"FuncBussTwo:doOneStep"< }

//virtual void doTowStep()
//{
// cout<<"FuncBussTwo:doTowStep"< // }

virtual void doThreeStep()
{
cout<<"FuncBussTwo:doThreeStep"< }

};
int _tmain(int argc, _TCHAR* argv[])
{

FuncBase * f;
f= new FuncBussOne;
f->setHook(true);
f->process();
cout<<"---------"< f=new FuncBussTwo;
f->setHook(false);
f->process();

delete f;

return 0;
}

运行结果

其中process 是父类独有的有的。而其他方法可以根据具体类,具体自己怎么设计了,但是其逻辑过程是不变的。