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

設計模式C++描述----02.模板(Template)模式

編輯:C++入門知識

一. 問題
在面向對象系統的分析與設計過程中經常會遇到這樣一種情況:對於某一個業務邏輯(算法實現)在不同的對象中有不同的細節實現,但是邏輯(算法)的框架(或通用的應用算法)是相同的。Template提供了這種情況的一個實現框架。

二. 模式

Template 模式是采用繼承的方式實現這一點:將邏輯(算法)框架放在抽象基類中,並定義好細節的接口,子類中實現細節。

\
三. 代碼

[cpp]
//抽象基類,實現了一個模板方法 
class AbstractClass 

public: 
    virtual ~AbstractClass() 
    { 
    } 
 
        //模板方法,只在抽象基類中實現 
    void TemplateMethod() 
    { 
        this->PrimitiveOperation1(); 
        this->PrimitiveOperation2(); 
    } 
 
protected: 
    virtual void PrimitiveOperation1() = 0; 
 
    virtual void PrimitiveOperation2() = 0; 
 
    AbstractClass() 
    { 
    } 
}; 
 
//具體子類,實現操作的特定細節 
class ConcreteClass1:public AbstractClass 

public: 
    ConcreteClass1() 
    { 
    } 
 
    ~ConcreteClass1() 
    { 
    } 
 
protected: 
    void PrimitiveOperation1() 
    { 
        cout<<"ConcreteClass1...PrimitiveOperation1"<<endl; 
    } 
 
    void PrimitiveOperation2() 
    { 
        cout<<"ConcreteClass1...PrimitiveOperation2"<<endl; 
    } 
}; 
 
//具體子類,實現操作的特定細節 
class ConcreteClass2:public AbstractClass 

public: 
    ConcreteClass2()  
    { 
    } 
 
    ~ConcreteClass2() 
    { 
    } 
 
protected: 
    void PrimitiveOperation1() 
    { 
        cout<<"ConcreteClass2...PrimitiveOperation1"<<endl; 
    } 
 
    void PrimitiveOperation2() 
    { 
        cout<<"ConcreteClass2...PrimitiveOperation2"<<endl; 
    } 
}; 
 
 
int main() 

    AbstractClass* p1 = new ConcreteClass1(); 
    AbstractClass* p2 = new ConcreteClass2(); 
     
    p1->TemplateMethod(); 
    p2->TemplateMethod(); 
     
    return 0; 

其關鍵點就是將通用算法封裝在抽象基類中,並將不同的算法細節放到子類中實現。

 


作者 lwbeyond

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