• <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)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

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

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


            組成部分

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


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

            UML類圖
             

            實(shí)例代碼
            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 老狼 閱讀(1453) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++
            久久这里有精品| 久久久久久久波多野结衣高潮| 久久人人爽人人爽人人片AV麻烦| 日本精品一区二区久久久| 久久毛片一区二区| 久久99热只有频精品8| 国产精品毛片久久久久久久| 久久93精品国产91久久综合| 久久亚洲AV无码精品色午夜麻豆| 久久婷婷五月综合97色| 国产精品青草久久久久福利99 | 国内精品久久久久久99蜜桃| segui久久国产精品| 人妻无码精品久久亚瑟影视| 一本色道久久88加勒比—综合| 久久亚洲sm情趣捆绑调教| 99久久精品免费看国产| 久久综合精品国产二区无码| 精品免费久久久久国产一区| 久久精品亚洲日本波多野结衣 | 久久99国产亚洲高清观看首页| 女人高潮久久久叫人喷水| 国产韩国精品一区二区三区久久| 午夜精品久久久内射近拍高清 | 亚洲AV无码久久精品狠狠爱浪潮| 欧美精品丝袜久久久中文字幕| 久久久久久久尹人综合网亚洲| 国产69精品久久久久观看软件| 国产三级观看久久| 情人伊人久久综合亚洲| 粉嫩小泬无遮挡久久久久久| 亚洲国产另类久久久精品| 亚洲国产视频久久| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 很黄很污的网站久久mimi色| 四虎国产精品免费久久久| 国产精品欧美久久久天天影视| 99久久99这里只有免费费精品| 色狠狠久久AV五月综合| 国产精品乱码久久久久久软件| 人人狠狠综合久久亚洲高清|