当前位置:编程学习 > XML/UML >>

用代码和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++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,