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

設計模式之代理模式,C++實現

編輯:C++入門知識

這一篇主要參照了《大話設計模式》


//代理模式:為其他對象提供一種代理以控制這個對象的訪問
 //簡而言之就是給對象加一個殼
 
 //1.遠程代理
 //2.虛擬代理
 //3.安全代理
 //4.智能指引www.2cto.com
 
 //問1:代理模式和聚合關系有什麼區別,感覺適配器模式也能解決類似問題?
 //答1:強調了對象的行為

截下來的圖,自己用visio畫的太丑了


[cpp]
#include "stdafx.h" 
 #include <windows.h> 
 #include <iostream> 
 using namespace std; 
  
 //大話設計模式中的例子 
 //A君讓代理人B君給C小姐送禮物 
  
 class IGiveGift 
 { 
 public: 
            IGiveGift(){;} 
    virtual ~IGiveGift(){;} 
  
    virtual void GiveGift() = 0;  
 }; 
  
 class PersonA : public IGiveGift 
 { 
 public: 
    PersonA(const std::string & strGirlName) 
    { 
        m_strGirlName = strGirlName; 
    } 
    void GiveGift() 
    { 
        std::cout<<m_strGirlName.c_str()<<","<<"送你的禮物!"<<endl; 
    } 
 private: 
    std::string m_strGirlName; 
  
 }; 
  
 class ProxyB : public IGiveGift 
 { 
 public: 
    void SetClientPerson(PersonA *pA) 
    { 
        m_pPersonA = pA; 
    } 
    void GiveGift() 
    { 
        m_pPersonA->GiveGift(); 
    } 
 private: 
    PersonA *m_pPersonA; 
 }; 
  
 int _tmain(int argc, _TCHAR* argv[]) 
 { 
    //A君出現了,懷著對心上人的思念 
    PersonA *pA = new PersonA("C小姐"); 
    //A君不好意思送禮物,於是找到了代理B君 
    ProxyB *pB = new ProxyB(); 
    pB->SetClientPerson(pA); 
    //B君送禮來了 
    pB->GiveGift(); 
  
    //落幕 
    if (pA) 
    { 
        delete pA; 
        pA = NULL; 
    } 
    if (pB) 
    { 
        delete pB; 
        pB = NULL; 
    } 
    return 0; 
 } 


 

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