• <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++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              0 Posts :: 23 Stories :: 83 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(17)

            我參與的團隊

            搜索

            •  

            最新評論

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

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


            組成部分

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


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

            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++
            国内精品九九久久久精品| 久久综合给合综合久久| 亚洲欧美国产日韩综合久久 | 国产成人久久精品一区二区三区| 久久91精品国产91久久户| 久久精品人妻中文系列| 久久99久久99精品免视看动漫 | 久久久久久久久久久免费精品| 久久免费视频网站| 久久久久中文字幕| 久久精品国产一区二区| 性做久久久久久久久| 欧美日韩久久中文字幕| 久久永久免费人妻精品下载| 欧美精品久久久久久久自慰| 久久精品国产亚洲AV电影| 久久久91精品国产一区二区三区| 热re99久久精品国产99热| 欧美久久综合九色综合| 久久久久久精品无码人妻| 狠狠色丁香久久综合婷婷| 久久九色综合九色99伊人| 久久久这里有精品| 国产成人精品久久免费动漫| 国产一区二区精品久久岳| 久久久久久亚洲精品影院| 国内精品久久久久影院日本| 久久99精品国产麻豆不卡| 狠狠色婷婷久久综合频道日韩 | 久久AV高潮AV无码AV| 国产精品天天影视久久综合网| 精品久久综合1区2区3区激情| 亚洲精品国产第一综合99久久| 久久亚洲精品成人AV| 久久国产精品国语对白| 久久亚洲AV成人无码电影| 久久五月精品中文字幕| 国内精品久久人妻互换| 久久国产AVJUST麻豆| 国产精品永久久久久久久久久| 色综合久久无码五十路人妻|