• <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 老狼 閱讀(1449) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            久久天堂AV综合合色蜜桃网| 久久亚洲私人国产精品| 亚洲国产精品热久久| 国产女人aaa级久久久级| 国产精品99久久精品爆乳| 久久亚洲精品国产精品婷婷| 久久久久久精品久久久久| 72种姿势欧美久久久久大黄蕉| 国内精品久久久久久不卡影院| 亚洲日韩中文无码久久| 亚洲嫩草影院久久精品| 亚洲中文字幕无码久久2017| 精品久久人人爽天天玩人人妻 | 伊人久久大香线蕉av一区| 色综合久久综精品| 97精品国产97久久久久久免费| 91精品国产高清久久久久久91| 99久久精品免费看国产一区二区三区| 青青青伊人色综合久久| 久久这里只有精品18| 亚洲?V乱码久久精品蜜桃 | 欧美熟妇另类久久久久久不卡 | 亚洲精品无码久久久久sm| 国产亚州精品女人久久久久久| 日日躁夜夜躁狠狠久久AV| 亚洲精品97久久中文字幕无码| 一本大道加勒比久久综合| 久久精品嫩草影院| 91精品国产综合久久久久久| 色妞色综合久久夜夜| 欧美牲交A欧牲交aⅴ久久| 精品久久久久久国产| 18禁黄久久久AAA片| 久久人做人爽一区二区三区| 伊人久久成人成综合网222| 一级做a爰片久久毛片看看| 亚洲国产综合久久天堂| 亚洲成av人片不卡无码久久 | 久久精品成人| 久久久久国产精品嫩草影院 | 色妞色综合久久夜夜|