用代码和UML图化解设计模式之《模板方法模式》
今天学习了模板方法模式,让我恍然大悟,似曾相识。因为之前自己再设计项目的时候,就用到了这个模式。
当时还不知道自己用的是个模式,只是觉得非常好。很给力。所以,今天学起来很有感受。
这个模式就是利用了面向对象的多态,抽象哪些公用的方法,就不用实现了,其他的按照业务逻辑来独自实现。
等到调用就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;}
运行结果

其中process 是父类独有的有的。而其他方法可以根据具体类,具体自己怎么设计了,但是其逻辑过程是不变的。
基类里的私有变量,就是一种钩子模式。呵呵,所有叫hook。
更多文章,欢迎访问:
http://blog.csdn.net/wallwind
- 1楼yutao0511小时前
- 这模板模式是博主自己创造的吧,就是一很简单的面向对象的特性,算不上模式。