| 当时还不知道自己用的是个模式,只是觉得非常好。很给力。所以,今天学起来很有感受。   这个模式就是利用了面向对象的多态,抽象哪些公用的方法,就不用实现了,其他的按照业务逻辑来独自实现。 等到调用就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 是父类独有的有的。而其他方法可以根据具体类,具体自己怎么设计了,但是其逻辑过程是不变的。 |