1. 程式人生 > >代理模式(C++)

代理模式(C++)

pan 記錄 proxy eal quest 對象 保護 時間 resource

   年過完了,開始上班了,時間過得太快了,感覺過了個假年........

  代理模式:為其他對象提供一種代理,以控制這個對象的訪問。

  角色分工:Subject:抽象角色,聲明對真實對象和代理對象的共同接口;Proxy:代理角色,代理真實對象的訪問;RealSubject:真實角色,最終需要引用的對象。

  代理模式主要分為四類:遠程代理、虛代理、保護代理、智能引用

  下面筆記,主要記錄虛代理,關於遠程代理、保護代理、智能引用等,可以查查資料,其核心思想都是跟其定義一樣。特別提下,智能引用其實跟可以參考智能指針的實現,采用引用計數,可以參考:http://www.cnblogs.com/huiz/p/8313209.html

  虛代理:可以緩存實體的附加信息,以便延遲對它的訪問,直到我們真正需要一個對象的時候才創建它

  例如:在項目中,我們經常需要加載資源,在開機就立即加載所有的資源,會導致一些性能問題,如開機時間太長等,有需要需要在真正需要的時候再去加載resources,我們可以定義代理類,在代理類裏面加載真實對象的resources,這樣就可以實現延遲加載。具體可以看UML類圖:

技術分享圖片

再看看代碼:

#include <iostream>
using namespace std;

class Base //Subject
{
public:
    virtual void requestLoader() = 0
; virtual ~Base(){} }; class Control : public Base //RealSubject { public: virtual void requestLoader() { cout<<"request loader resources."<<endl; } }; class Proxy : public Base //proxy { private: Control* m_con; public: Proxy(Control* con):m_con(con){}
virtual void requestLoader() { m_con->requestLoader(); } ~Proxy() { if(NULL != m_con) { delete m_con; m_con = NULL; } } }; int main(int argc, char** argv) { Control* con = new Control; Proxy* pr = new Proxy(con); pr->requestLoader(); delete pr; pr = NULL; return 0; }

輸出如下:
技術分享圖片

  以上代碼在VC6.0上運行通過,如有問題,還請多多指教,在此先謝過了哈。

  

代理模式(C++)