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

設計模式之模板方法模式,C++實現

編輯:C++入門知識

[cpp] 
// 模板方法模式, 定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。 
 // 模板方法使得子類可以不改變一個算法的結構既可沖定義該算法的某些特定步驟。 
  
  
 // 問1:和泛型編程區別? 
 // 問2:感覺用策略模式也可以啊? 
  
 // 答1:泛型編程改變的是數據類型,模板方法一個改變的是自定義的實現細節。 
 // 答2:模板方法模式更後一層,為算法的實現細節,而策略模式是針對幾種算法。 
  
 #include "stdafx.h" 
  
  
 // 函數模板 
 template<typename T> 
 int Compare(const T &v1, const T &v2) 
 { 
    if (v1 < v2) 
    { 
        return -1; 
    } 
    else if (v1 > v2) 
    { 
        return 1; 
    } 
    else 
        return 0; 
 } 
  
  
 // 類模板 
 template<class Type> 
 class CCompare 
 { 
 public: 
    CCompare(const Type & v1, const Type & v2) 
    { 
        m_tFirst = v1; 
        m_tSecond = v2; 
    } 
    ~CCompare(){;} 
  
    //template<class Type> 
    int Compare() 
    { 
        if (m_tFirst < m_tSecond) 
        { 
            return -1; 
        } 
        else if (m_tFirst > m_tSecond) 
        { 
            return 1; 
        } 
        else 
            return 0;    
    } 
 private: 
    Type  m_tFirst; 
    Type  m_tSecond; 
 }; 
  
 //模板方法 
 class Bill 
 { 
 public: 
    virtual void AddCondition() = 0; 
    void Pay() 
    { 
        AddCondition(); 
        printf("You need pay $100!\n"); 
    } 
 protected: 
 private: 
 }; 
  
 class MaleBill : public Bill 
 { 
 public: 
    void AddCondition() 
    { 
        printf("Sir!\n"); 
    } 
 protected: 
 private: 
 }; 
  
 class FemaleBill : public Bill 
 { 
 public: 
    void AddCondition() 
    { 
        printf("Lady!\n"); 
    } 
 protected: 
 private: 
 }; 
  
  
  
 // 測試函數 
 void TestTemplateFunc() 
 { 
    int result; 
    result = Compare(2.3, 3.1); 
    result = Compare(1, 2); 
 } 
  
 void TestTemplateClass() 
 { 
    int result; 
    CCompare<double> cp(2.3, 3.1); 
    result = cp.Compare(); 
  
    CCompare<int> cp1(1, 2); 
    result = cp1.Compare(); 
 } 
  
 void TestTemplateMethod() 
 { 
    Bill *pMale = new MaleBill; 
    pMale->Pay(); 
    Bill *pFemale = new FemaleBill; 
    pFemale->Pay(); 
  
    if (pMale) 
    { 
        delete pMale; 
        pMale = NULL; 
    } 
    if (pFemale) 
    { 
        delete pFemale; 
        pFemale = NULL; 
    } 
  
 } 
  
 int _tmain(int argc, _TCHAR* argv[]) 
 { 
    //測試模板函數 
    TestTemplateFunc(); 
    //測試模板類 
    TestTemplateClass(); 
    //測試模板方法 
    TestTemplateMethod(); 
  
    return 0; 
 } 

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