程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 用代碼和UML圖化解設計模式之《模板方法模式》

用代碼和UML圖化解設計模式之《模板方法模式》

編輯:C++入門知識

當時還不知道自己用的是個模式,只是覺得非常好。很給力。所以,今天學起來很有感受。

 

這個模式就是利用了面向對象的多態,抽象哪些公用的方法,就不用實現了,其他的按照業務邏輯來獨自實現。

等到調用就ok了

 

今天只能上代碼了

[cpp]
// TemplateMethod.cpp : 定義控制台應用程序的入口點。 
// 
//************************************************************************/     
/* @filename    TemplateMethod.cpp
@author       wallwind  
@createtime    2012/10/22 23:30
@function     模板方法模式  
@email       [email protected]  
*/     
/************************************************************************/    
 
 
#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 是父類獨有的有的。而其他方法可以根據具體類,具體自己怎麼設計了,但是其邏輯過程是不變的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved