• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Mike's blog

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              0 Posts :: 23 Stories :: 83 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(17)

            我參與的團隊

            搜索

            •  

            最新評論

            概念
            代理這個詞對我們來說非常熟悉,比如上網經常使用的代理服務器,還有銷售代理商等。就是客戶與目標之間的橋梁。
            設計模式中的代理模式(Proxy)是這樣定義的:為其他對象提供一種代理以控制對這個對象的訪問。
            若要為其他對象提供代理服務,那么首先本身也要具有與被代理對象同樣的方法,那么這樣在訪問時才能真正起到(透明)代理的作用。
            所以代理類一般同被代理類是繼承于同一個類的兄弟類,區別就是他是為別人服務的。

            這樣說來,表面看代理很風光,啥都得通過他,好像沒他不行似的,其實他就是個跑堂的!


            組成部分

            1.抽象主題:基類,聲明了代理對象和真實對象的共同點;
            2.真實主題:真正需要被調用的對象;
            3.代理對象:代理真實對象的對象。


            分類
            1.遠程代理:也就是為一個對象在不同的地址空間提供局部代表,這樣可以隱藏一個對象存在于不同地址空間的事實。這個不同的地址空間可以是在本機器上,也可以在另一臺機器中。
            2.虛擬代理:是根據需要創建開銷很大的對象,通過它來存放實例化需要很長時間的真實對象,使其只有在真正需要時才被創建。
            3.安全代理:也叫保護代理,用來控制真實對象訪問時的權限,如果有必要的話,可以給不同調用者提供不同的權限。
            4.智能指引:是指當調用真實對象時,代理處理另外一些事,比如記錄對此對象的調用次數等。
            5.寫時拷貝:虛擬代理的一種,把復制推遲到只有客戶的需要時才進行。
            6.緩存代理:為某一個目標的操作結果提供臨時存儲空間,以便其他客戶的可以共享訪問,有點緩存的味道。
            7.防火墻代理:保護對象,不讓用戶訪問,安全代理的特例。
            8.同步代理:可以讓幾個用戶同時訪問同一個對象而不產生沖突。
            常用的是前四種代理方式。

            UML類圖
             

            實例代碼
            1)Proxy.h

             1#ifndef _PROXY_H
             2#define _PROXY_H
             3
             4///@brief Abstract Base Class.
             5class Subject 
             6{
             7public:
             8    Subject() {}
             9    virtual ~Subject() {}
            10    virtual void request() = 0;
            11}
            ;
            12
            13///@brief Real entity class.
            14class RealSubject: public Subject 
            15{
            16public:
            17    RealSubject();
            18    virtual ~RealSubject();
            19    virtual void request();
            20}
            ;
            21
            22///@brief Proxy class, including a pointer of pointing to the Real-entity class. 
            23class Proxy: public Subject 
            24{
            25public:
            26    Proxy();
            27    virtual ~Proxy();
            28    virtual void request();
            29
            30private:
            31    RealSubject* m_realSubject;
            32}
            ;
            33
            34#endif

            2)Proxy.cpp
             1#include "Proxy.h"
             2#include <iostream>
             3
             4using namespace std;
             5
             6RealSubject::RealSubject()
             7{
             8    cout << "RealSubject constructor" << endl;
             9}

            10
            11RealSubject::~RealSubject()
            12{
            13    cout << "RealSubject destructor" << endl;
            14}

            15
            16///@brief Real-entity's request method.
            17void RealSubject::request()
            18{
            19    cout << "RealSubject request" << endl;
            20}

            21
            22Proxy::Proxy(): m_realSubject(NULL)
            23{
            24    cout << "Proxy constructor" << endl;
            25}

            26
            27Proxy::~Proxy()
            28{
            29    cout << "Proxy destructor" << endl;
            30    delete m_realSubject;
            31    m_realSubject = NULL;
            32}

            33
            34///@brief Proxy's request method.
            35void Proxy::request()
            36{
            37    cout << "Proxy request" << endl;
            38
            39    ///@brief Construct it when necessary.
            40    if (!m_realSubject) {
            41        m_realSubject = new RealSubject();
            42    }

            43
            44    m_realSubject->request();
            45}

            3)Main.cpp
             1#include "Proxy.h"
             2#include <iostream>
             3
             4using namespace std;
             5
             6int main()
             7{
             8    Subject* proxy = new Proxy();
             9    proxy->request();
            10
            11    delete proxy;
            12    proxy = NULL;
            13
            14    return 0;
            15}

            posted on 2010-08-25 00:37 老狼 閱讀(1466) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            囯产精品久久久久久久久蜜桃| 久久天天躁狠狠躁夜夜avapp| 亚洲午夜精品久久久久久人妖| 99久久精品无码一区二区毛片| 亚洲国产成人乱码精品女人久久久不卡 | 国产精品内射久久久久欢欢| 四虎影视久久久免费| 久久久一本精品99久久精品88| 久久久国产精品亚洲一区| 婷婷久久综合| 国产精品美女久久久久av爽 | 久久亚洲天堂| 久久精品国产免费一区| 色综合久久无码中文字幕| 精品欧美一区二区三区久久久| 人妻精品久久无码专区精东影业| 精品国产热久久久福利| 97久久香蕉国产线看观看| 亚洲国产小视频精品久久久三级| 日本三级久久网| 欧美噜噜久久久XXX| 久久精品中文字幕大胸| 久久久久女教师免费一区| 久久99精品久久久久久| 久久久久亚洲av无码专区| 亚洲av伊人久久综合密臀性色 | 久久se精品一区二区影院| 久久亚洲国产午夜精品理论片| 亚洲国产另类久久久精品小说| 亚洲欧洲中文日韩久久AV乱码| 久久精品无码一区二区三区免费| 久久精品九九亚洲精品天堂| 狠狠色丁香婷婷久久综合不卡| 日韩精品久久无码人妻中文字幕| 亚洲精品无码久久一线| 久久人人爽人人爽人人AV| 一本久久a久久精品vr综合| 午夜人妻久久久久久久久| 狠色狠色狠狠色综合久久| 婷婷综合久久中文字幕| 久久99久久成人免费播放|