你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
用代码和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 是父类独有的有的。而其他方法可以根据具体类,具体自己怎么设计了,但是其逻辑过程是不变的。

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089