国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

結(jié)構(gòu)型設(shè)計(jì)模式之代理模式【設(shè)計(jì)模式系列】

這篇具有很好參考價(jià)值的文章主要介紹了結(jié)構(gòu)型設(shè)計(jì)模式之代理模式【設(shè)計(jì)模式系列】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

系列文章目錄

C++技能系列
Linux通信架構(gòu)系列
C++高性能優(yōu)化編程系列
深入理解軟件架構(gòu)設(shè)計(jì)系列
高級(jí)C++并發(fā)線程編程
設(shè)計(jì)模式系列

期待你的關(guān)注哦!??!
結(jié)構(gòu)型設(shè)計(jì)模式之代理模式【設(shè)計(jì)模式系列】,設(shè)計(jì)模式系列,設(shè)計(jì)模式,代理模式,架構(gòu),c++

現(xiàn)在的一切都是為將來(lái)的夢(mèng)想編織翅膀,讓夢(mèng)想在現(xiàn)實(shí)中展翅高飛。
Now everything is for the future of dream weaving wings, let the dream fly in reality.

一、代理模式介紹

?? 意圖:
在不改變?cè)碱悾ɑ蚍Q為被代理類)的情況下,通過(guò)引入代理類來(lái)給原始類附加不相關(guān)的其他功能。為其他對(duì)象提供一種代理控制對(duì)這個(gè)對(duì)象的訪問(wèn)。

?? 主要解決:
在直接訪問(wèn)對(duì)象時(shí)帶來(lái)的問(wèn)題,比如說(shuō):要訪問(wèn)的對(duì)象在遠(yuǎn)程的機(jī)器上。在面向?qū)ο笙到y(tǒng)中,有些對(duì)象由于某些原因(比如對(duì)象創(chuàng)建開銷很大,或者某些操作需要安全控制,或者需要進(jìn)程外的訪問(wèn)),直接訪問(wèn)會(huì)給使用者或者系統(tǒng)結(jié)構(gòu)帶來(lái)很多麻煩,我們可以在訪問(wèn)此對(duì)象時(shí)加上一個(gè)對(duì)此對(duì)象的訪問(wèn)層。

?? 何時(shí)使用:
想在訪問(wèn)一個(gè)類時(shí)做一些控制。

?? 如何解決:
增加中間層。

結(jié)構(gòu)型設(shè)計(jì)模式之代理模式【設(shè)計(jì)模式系列】,設(shè)計(jì)模式系列,設(shè)計(jì)模式,代理模式,架構(gòu),c++

圖1_1 代理模式類圖

代理模式本質(zhì)是在訪問(wèn)對(duì)象的時(shí)候引入了一定程度的間接性,由于間接性訪問(wèn)對(duì)象,可以附加多種用途。

二、代理模式優(yōu)缺點(diǎn)

2.1 優(yōu)點(diǎn)

  • 代理模式能夠協(xié)調(diào)調(diào)用者和被調(diào)用者,在一定程度上降低了系統(tǒng)的耦合度。

  • 職責(zé)清晰。實(shí)現(xiàn)好內(nèi)部結(jié)構(gòu)就可以,具體客戶要求由代理進(jìn)行分化。

  • 高擴(kuò)展性。具體主題角色隨時(shí)變化,只要實(shí)現(xiàn)了接口,無(wú)論如何都逃不出代理的手掌,所以代理無(wú)論如何都是可以使用的。

  • 遠(yuǎn)程代理使得客戶端可以訪問(wèn)在遠(yuǎn)程機(jī)器上的對(duì)象,遠(yuǎn)程機(jī)器可能具有更好的計(jì)算性能與處理速度,可以快速響應(yīng)并處理客戶端請(qǐng)求。

  • 虛擬代理通過(guò)使用一個(gè)小對(duì)象來(lái)代表一個(gè)大對(duì)象,可以減少系統(tǒng)資源的消耗,對(duì)系統(tǒng)進(jìn)行優(yōu)化并提高運(yùn)行速度。

  • 保護(hù)代理可以控制對(duì)真實(shí)對(duì)象的使用權(quán)限。

2.2 缺點(diǎn)

  • 由于在客戶端和真實(shí)主題之間增加了代理對(duì)象,因此有些類型的代理模式可能會(huì)造成請(qǐng)求的處理速度變慢。

  • 實(shí)現(xiàn)代理模式需要額外的工作,有些代理模式的實(shí)現(xiàn)非常復(fù)雜。

三、代理模式使用場(chǎng)景

  • 遠(yuǎn)程代理:為一個(gè)對(duì)象在不同的地址空間提供局部代表,可以隱藏一個(gè)對(duì)象存在于不同地址空間的事實(shí)。

  • 虛擬代理:根據(jù)需要?jiǎng)?chuàng)建開銷很大的對(duì)象。通過(guò)虛擬代理來(lái)存放實(shí)例化需要很長(zhǎng)時(shí)間的真實(shí)對(duì)象。例如:圖片加載的時(shí)候。

  • 安全代理:用來(lái)控制真是對(duì)象訪問(wèn)時(shí)的權(quán)限。

  • 智能指引:當(dāng)調(diào)用真實(shí)的對(duì)象的時(shí)候,代理處理另外一些事。

    如果用戶不能直接訪問(wèn)真實(shí)角色,只能訪問(wèn)代理,則需要讓代理自動(dòng)生成一個(gè)真實(shí)角色對(duì)象。

    適配器模式中適配器為所適配的對(duì)象提供了一個(gè)不同的接口,代理模式中代理提供的接口與實(shí)體的接口相同。裝飾模式的目的是為對(duì)象添加功能,而代理模式則控制對(duì)對(duì)象的訪問(wèn)。

四、代理模式實(shí)現(xiàn)

Subject抽象類:

#ifndef SUBJECT_H
#define SUBJECT_H
#include <iostream>
using namespace std;
 
//定義了Proxy和ConcreteSubject的公有接口
class Subject
{
public:
    virtual ~Subject(){}
    virtual void request() = 0;
protected:
     Subject(){}
};
 
 
#endif // SUBJECT_H


ConcreteSubject真實(shí)主題類:

#ifndef CONCRETESUBJECT_H
#define CONCRETESUBJECT_H
#include "Subject.h"
 
//定義真實(shí)主題類
class ConcreteSubject : public Subject
{
public:
    ConcreteSubject(){}
    ~ConcreteSubject(){}
    void request()
    {
        cout << "ConcreteSubject::request" << endl;
    }
};
 
#endif // CONCRETESUBJECT_H

Proxy代理類:

#ifndef PROXY_H
#define PROXY_H
#include "Subject.h"
#include "ConcreteSubject.h"
 
//定義代理類
class Proxy : public Subject
{
public:
    Proxy():m_pSubject(NULL){}
    ~Proxy()
    {
        delete m_pSubject;
        m_pSubject = NULL;
    }
    void request()
    {
        if(NULL == m_pSubject)
        {
            m_pSubject = new ConcreteSubject();
        }
        //額外操作
        doSomethingA();
        //代理實(shí)體的操作
        m_pSubject->request();
        //額外操作
        doSomethingB();
    }
    void doSomethingA()
    {
        cout << "Proxy::doSomethingA" << endl;
    }
    void doSomethingB()
    {
        cout << "Proxy::doSomethingB" << endl;
    }
private:
    Subject* m_pSubject;
};
 
#endif // PROXY_H

客戶調(diào)用程序:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-604473.html

#include "Proxy.h"
 
int main()
{
    //使用代理取代ConcreteSubject
    Proxy* proxy = new Proxy();
    proxy->request();
 
    delete proxy;
    return 0;
}

到了這里,關(guān)于結(jié)構(gòu)型設(shè)計(jì)模式之代理模式【設(shè)計(jì)模式系列】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++設(shè)計(jì)模式結(jié)構(gòu)型之代理模式

    一、概述 ?? ?代理模式是一種結(jié)構(gòu)型模式,在很多不同的場(chǎng)合具有廣泛的分類和應(yīng)用。其主要實(shí)現(xiàn)的思想是在客戶端和真正要訪問(wèn)的對(duì)象之間引入一個(gè) 代理對(duì)象(間接層),于是,以往客戶端對(duì)真正對(duì)象的訪問(wèn)現(xiàn)在變成了通過(guò)代理對(duì)象進(jìn)行訪問(wèn),代理對(duì)象在這里起到了一個(gè)

    2024年02月13日
    瀏覽(32)
  • 結(jié)構(gòu)型設(shè)計(jì)模式之組合模式【設(shè)計(jì)模式系列】

    結(jié)構(gòu)型設(shè)計(jì)模式之組合模式【設(shè)計(jì)模式系列】

    C++技能系列 Linux通信架構(gòu)系列 C++高性能優(yōu)化編程系列 深入理解軟件架構(gòu)設(shè)計(jì)系列 高級(jí)C++并發(fā)線程編程 設(shè)計(jì)模式系列 期待你的關(guān)注哦!??! 現(xiàn)在的一切都是為將來(lái)的夢(mèng)想編織翅膀,讓夢(mèng)想在現(xiàn)實(shí)中展翅高飛。 Now everything is for the future of dream weaving wings, let the dream fly in reali

    2024年02月15日
    瀏覽(24)
  • 設(shè)計(jì)模式-04.01-結(jié)構(gòu)型-代理&橋接&裝飾器&適配器

    設(shè)計(jì)模式-04.01-結(jié)構(gòu)型-代理&橋接&裝飾器&適配器

    創(chuàng)建型模式比較好理解,后面的結(jié)構(gòu)型和行為型設(shè)計(jì)模式不是那么好理解。如果遇到不好理解的設(shè)計(jì)模式,我一般會(huì)在開頭舉比較簡(jiǎn)單的Demo案例來(lái)幫助理解。 前面幾節(jié),我們講了設(shè)計(jì)模式中的創(chuàng)建型模式。創(chuàng)建型模式主要解決對(duì)象的創(chuàng)建問(wèn)題,封裝復(fù)雜的創(chuàng)建過(guò)程,解耦對(duì)

    2024年02月09日
    瀏覽(24)
  • 設(shè)計(jì)模式--------結(jié)構(gòu)型模式

    設(shè)計(jì)模式--------結(jié)構(gòu)型模式

    結(jié)構(gòu)型模式描述如何將類或?qū)ο蟀茨撤N布局組成更大的結(jié)構(gòu)。它分為類結(jié)構(gòu)型模式和對(duì)象結(jié)構(gòu)型模式,前者采用繼承機(jī)制來(lái)組織接口和類,后者釆用組合或聚合來(lái)組合對(duì)象。 由于組合關(guān)系或聚合關(guān)系比繼承關(guān)系耦合度低,滿足“合成復(fù)用原則”,所以對(duì)象結(jié)構(gòu)型模式比類結(jié)構(gòu)

    2024年02月13日
    瀏覽(30)
  • 設(shè)計(jì)模式結(jié)構(gòu)型——外觀模式

    設(shè)計(jì)模式結(jié)構(gòu)型——外觀模式

    目錄 什么是外觀模式 外觀模式的實(shí)現(xiàn) 外觀模式角色 外觀模式舉例 外觀模式類圖 外觀模式代碼實(shí)現(xiàn) 外觀模式的特點(diǎn) 優(yōu)點(diǎn) 缺點(diǎn) 注意事項(xiàng) 應(yīng)用場(chǎng)景 總結(jié) ????????外觀模式(Facade Pattern):又叫作門面模式,歸屬于結(jié)構(gòu)型模式。外觀模式定義了提供了定義了一個(gè)統(tǒng)一的高層

    2024年02月16日
    瀏覽(26)
  • 結(jié)構(gòu)型設(shè)計(jì)模式——橋接模式

    結(jié)構(gòu)型設(shè)計(jì)模式——橋接模式

    橋接模式(Bridge pattern): 使用橋接模式通過(guò)將實(shí)現(xiàn)和抽象放在兩個(gè)不同的類層次中而使它們可以獨(dú)立改變。 橋接模式 (Bridge) 是一種結(jié)構(gòu)型設(shè)計(jì)模式, 可將 抽象 部分與 實(shí)現(xiàn) 部分 分離 ,使它們都可以獨(dú)立的變化。如果一個(gè)系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更

    2024年02月07日
    瀏覽(34)
  • 設(shè)計(jì)模式之結(jié)構(gòu)型模式

    設(shè)計(jì)模式之結(jié)構(gòu)型模式

    本文已收錄于專欄 《設(shè)計(jì)模式》 ??大話設(shè)計(jì)模式主要分為三部分,第一部分是創(chuàng)建型模式,第二部分是結(jié)構(gòu)型模式,第三部分是行為型模式。至于為什么要分為這三部分,我的理解是創(chuàng)建型是用于創(chuàng)建對(duì)象的而結(jié)構(gòu)型是發(fā)生在類與類之間的關(guān)系是比較宏觀的,比如說(shuō)組合

    2024年02月11日
    瀏覽(24)
  • 結(jié)構(gòu)型設(shè)計(jì)模式——外觀模式

    結(jié)構(gòu)型設(shè)計(jì)模式——外觀模式

    有句話說(shuō)這個(gè)世界就是個(gè)草臺(tái)班子,只不過(guò)排面做的好看而已,里面都是一包糠。這句話來(lái)形容外觀模式非常準(zhǔn)確,外觀模式又叫門面模式,顧名思義一個(gè)系統(tǒng)我不管你里面有多復(fù)雜有多少屎山代碼,我只要求你提供的接口好用,簡(jiǎn)單就行,即門面要有排面!用專業(yè)的話講是

    2024年01月22日
    瀏覽(29)
  • 設(shè)計(jì)模式之橋接模式【結(jié)構(gòu)型模式】

    設(shè)計(jì)模式之橋接模式【結(jié)構(gòu)型模式】

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 學(xué)習(xí)的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您: 想系統(tǒng)/深入學(xué)習(xí)某技術(shù)知識(shí)點(diǎn)… 一個(gè)人摸索學(xué)習(xí)很難堅(jiān)持,想組團(tuán)高效學(xué)習(xí)… 想寫博

    2024年01月25日
    瀏覽(26)
  • 設(shè)計(jì)模式-結(jié)構(gòu)型模式之橋接模式

    設(shè)計(jì)模式-結(jié)構(gòu)型模式之橋接模式

    設(shè)想如果要繪制矩形、圓形、橢圓、正方形,我們至少需要4個(gè)形狀類,但是如果繪制的圖形需要具有不同的顏色,如紅色、綠色、藍(lán)色等,此時(shí)至少有如下兩種設(shè)計(jì)方案: 第一種設(shè)計(jì)方案是為每一種形狀都提供一套各種顏色的版本。 第二種設(shè)計(jì)方案是根據(jù)實(shí)際需要對(duì)形狀和

    2023年04月18日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包