• <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++
            久久婷婷人人澡人人爽人人爱| 久久se精品一区二区影院| 亚洲欧美一级久久精品| 久久人人爽人人爽人人片av麻烦 | 伊人久久五月天| A级毛片无码久久精品免费| 69国产成人综合久久精品| 国产精品成人99久久久久91gav | 久久精品国产亚洲AV麻豆网站| 69SEX久久精品国产麻豆| 蜜臀久久99精品久久久久久| 一本一本久久a久久综合精品蜜桃| 国产亚洲色婷婷久久99精品| 女同久久| 久久久99精品成人片中文字幕| 人妻中文久久久久| 久久夜色精品国产亚洲| 热re99久久6国产精品免费| 久久这里只有精品视频99| 精品国产福利久久久| 亚洲综合精品香蕉久久网| 青青久久精品国产免费看| www久久久天天com| 久久久久久久久波多野高潮| 久久精品国产亚洲7777| 国产精品美女久久久久网| 亚洲国产精品无码久久久蜜芽| 久久久久国产精品三级网| 国产午夜精品理论片久久| 色综合久久88色综合天天| 精品熟女少妇av免费久久| 国产A级毛片久久久精品毛片| 国产一区二区久久久| 欧美精品一区二区久久| 国产国产成人久久精品| 88久久精品无码一区二区毛片 | 一本久久久久久久| 久久精品国产亚洲综合色| 久久精品国产亚洲沈樵| 青青草原综合久久大伊人精品| 97久久精品午夜一区二区|