日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

代理对象我所理解的设计模式(C++实现)——代理模式(Proxy Pattern)

發布時間:2023/12/13 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代理对象我所理解的设计模式(C++实现)——代理模式(Proxy Pattern) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章結束給大家來個程序員笑話:[M]

????

概述

????作為C++工程師,免不了要管理內存,內存管理也是C++中的難點,而智能指針采用引用計數的方法很方便的幫我們管理了內存的應用,極大方便了我們的任務效率。而智能指針的這類用法其實就是代理模式的一種,他幫我們控制了該對象的內存應用。

????代理模式就是為其他對象提供一種代理來控制對這個對象的拜訪。

????

????

種類和用途

????Proxy模式根據種類不同,效果也不盡雷同:

????1、近程(Remote)代理:為一個位于不同的地址空間的對象提供一個局域代表對象。這個不同的地址空間可所以在本機器中,也可是在另一臺機器中。近程代理又叫做大使(Ambassador)。好處是系統可以將網絡的細節隱藏起來,使得客戶端不必斟酌網絡的存在。客戶完全可以認為被代理的對象是局域的而不是近程的,而代理對象承當了大部份的網絡通訊任務。由于客戶可能沒有意識到會啟動一個耗費時間的近程調用,因此客戶沒有須要的思想準備。

????2、虛擬(Virtual)代理:根據需要創立一個資源消耗較大的對象,使得此對象只在需要時才會被真正創立。應用虛擬代理模式的好處就是代理對象可以在須要的時候才將被代理的對象加載;代理可以對加載的進程加以須要的優化。當一個模塊的加載非常耗費資源的情況下,虛擬代理的好處就非常顯著。

????3、Copy-on-Write代理:虛擬代理的一種。把復制(克隆)拖延到只有在客戶端需要時,才真正采取行動。

????4、保護(Protector Access)代理:控制對一個對象的拜訪,如果需要,可以給不同的用戶提供不同級別的應用權限。保護代理的好處是它可以在運行時間對用戶的有關權限進行檢查,然后在核實后決定將調用傳遞給被代理的對象。

????5、Cache代理:為某一個目標操作的結果提供臨時的存儲空間,以便多個客戶端可以共享這些結果。

????6、防火墻(Firewall)代理:保護目標,不讓惡意用戶親近。

????7、同步化(Synchronization)代理:使幾個用戶能夠同時應用一個對象而沒有沖突。

????8、智能引用(SmartReference)代理:當一個對象被引用時,提供一些額外的操作,比如將對此對象調用的次數記錄下來等。

????在所有種類的代理模式中,虛擬(Virtual)代理、近程(Remote)代理、智能引用代理(SmartReference Proxy)和保護(Protector Access)代理是最為常見的代理模式。

?

????

類圖和實例

????


????

代理模式所涉及的角色有:

抽象主題角色(Subject):聲明白實在主題和代理主題的共同接口,這樣一來在任何應用實在主題的地方都可以應用代理主題。

代理主題(Proxy)角色:代理主題角色內部含有對真是主題的引用,從而可以在任何時候操作實在主題對象;代理主題角色提供一個與實在主題角色雷同的接口,以便可以在任何時候都可以替換實在主體;控制實在主題的應用,擔任在需要的時候創立實在主題對象(和刪除實在主題對象);代理角色通常在將客戶端調用傳遞給實在的主題之前或以后,都要執行某個操作,而不是單純的將調用傳遞給實在主題對象。

實在主題角色(RealSubject)角色:定義了代理角色所代表的實在對象。


????這里給出一個C++中智能指針的例子,自己代碼從新實現了下:

每日一道理
天又快黑了,這座忙碌的城市又將入睡,讓這勞累的“身軀”暫別白日的辛勤,讓它入睡,陪伴著城市中的人們進入夢鄉。當空的彎月正深情地注視著這座城市與城市中的人們,看著家家戶戶的燈漸漸熄滅,它在床頭悄悄奏響“明月曲”……
// TestProxy.cpp : Defines the entry point for the console application. //#include "stdafx.h" #include <assert.h>#define KSAFE_DELETE(p) \if (p) \{ \delete p; \p = NULL; \}class KRefCount { public:KRefCount():m_nCount(0){}public:void AddRef(){m_nCount++;}int Release(){return --m_nCount;}void Reset(){m_nCount=0;}private:int m_nCount; };template <typename T> class KSmartPtr { public:KSmartPtr(void): m_pData(NULL){m_pReference = new KRefCount();m_pReference->AddRef();}KSmartPtr(T* pValue): m_pData(pValue){m_pReference = new KRefCount();m_pReference->AddRef();}KSmartPtr(const KSmartPtr<T>& sp): m_pData(sp.m_pData), m_pReference(sp.m_pReference){m_pReference->AddRef();}~KSmartPtr(void){if (m_pReference && m_pReference->Release() == 0){KSAFE_DELETE(m_pData);KSAFE_DELETE(m_pReference);}}inline T& operator*(){return *m_pData;}inline T* operator->(){return m_pData;}KSmartPtr<T>& operator=(const KSmartPtr<T>& sp){if (this != &sp){if (m_pReference && m_pReference->Release() == 0){KSAFE_DELETE(m_pData);KSAFE_DELETE(m_pReference);}m_pData = sp.m_pData;m_pReference = sp.m_pReference;m_pReference->AddRef();}return *this;}KSmartPtr<T>& operator=(T* pValue){if (m_pReference && m_pReference->Release() == 0){KSAFE_DELETE(m_pData);KSAFE_DELETE(m_pReference);}m_pData = pValue;m_pReference = new KRefCount;m_pReference->AddRef();return *this;}T* Get(){T* ptr = NULL; ptr = m_pData;return ptr;}void Attach(T* pObject){if (m_pReference->Release() == 0){KSAFE_DELETE(m_pData);KSAFE_DELETE(m_pReference);}m_pData = pObject;m_pReference = new KRefCount;m_pReference->AddRef();}T* Detach(){T* ptr = NULL;if (m_pData){ ptr = m_pData;m_pData = NULL;m_pReference->Reset();}return ptr;}private:KRefCount* m_pReference;T* m_pData; };

????

與其他模式的區分

????1)適配器模式Adapter

????適配器Adapter為它所適配的對象提供了一個不同的接口。相反,代理提供了與它的實體雷同的接口。然而,用于拜訪保護的代理可能會拒絕執行實領會執行的操作,因此,它的接口實際上可能只是實體接口的一個子集。

????2) 裝飾器模式Decorator

????盡管Decorator的實現部分與代理相似,但Decorator的目的不一樣。Decorator為對象添加一個或多個功能,而代理則控制對對象的拜訪。?

????

總結

????在軟件系統中,加一個中間層是我們常用的解決方法,這方面Proxy模式給了我們很好的實現。

????

????LCL_data原創于CSDN.NET【http://blog.csdn.net/lcl_data/article/details/8989420】

文章結束給大家分享下程序員的一些笑話語錄: 騰訊的動作好快,2010年3月5日19時28分58秒,QQ同時在線人數1億!剛剛看到編輯發布的文章,相差才2分鐘,然后連專題頁面都做出來了,他們早就預料到了吧?(其實,每人贈送10Q幣,輕輕松松上兩億!)

--------------------------------- 原創文章 By
代理和對象
---------------------------------

轉載于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/29/3106808.html

總結

以上是生活随笔為你收集整理的代理对象我所理解的设计模式(C++实现)——代理模式(Proxy Pattern)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产老头户外野战xxxxx | 在线观看视频www | 久久久国产精品视频 | 亚洲国产精品久久久久爰性色 | 国产精品污污 | av一区在线观看 | 色播视频在线观看 | 波多野结衣在线一区 | 禁网站在线观看免费视频 | 在线国产黄色 | 人妻91麻豆一区二区三区 | 日韩日韩日韩日韩日韩 | 少妇流白浆 | 视频免费在线 | 成人免费视频国产免费网站 | 国产亚洲av综合人人澡精品 | 成人三级在线播放 | 手机免费看av | 国产视频二区三区 | 无码国产色欲xxxx视频 | 日本a一级片 | 精品色| 91极品身材尤物theporn | 美女裸体跪姿扒开屁股无内裤 | 91精品国产综合久久久久久 | 久久乐视频 | 欧美日韩精品中文字幕 | 欧美日国产 | 自拍偷拍精品 | a级性生活视频 | 久久成人网18网站 | 欧美日韩精品一区二区三区视频播放 | 午夜色婷婷 | 婷婷精品一区二区三区 | 国产在线喷水 | 日韩精品2| 成人精品一区二区三区视频 | 国产精品一区av | 99色影院 | 日日夜夜狠狠操 | 不卡中文av | 国产精品系列在线观看 | 久草免费在线观看视频 | 最近2019中文字幕大全第二页 | 日本一道在线 | 国产精品国产三级国产aⅴ 欧美bbbbbbbbbbbb18av | 河北彩花中文字幕 | 婷婷成人综合网 | 欧美一区,二区 | 福利社av| 星空大象mv高清在线观看免费 | 欧美xxxxx高潮喷水麻豆 | 1000部多毛熟女毛茸茸 | 天天天综合网 | 亚洲人成免费电影 | 快色在线 | 四虎色播| 日本美女一区 | 色校园 | 亚洲18在线看污www麻豆 | 国产中文字幕网 | aaa成人| 国产91av在线 | 久久资源av | 国产成人精品久久二区二区 | 好吊妞在线 | 欧美日本韩国在线 | 国产激情在线看 | 夜夜操狠狠操 | 国久久| 色综合天天综合综合国产 | 国产一区二区视频免费在线观看 | 欧美午夜精品久久久久久人妖 | 成人性生交大片 | 日韩有码电影 | 女生隐私免费看 | 黑人高潮一区二区三区在线看 | 欧美性猛交性大交 | 欧美日韩成人在线播放 | 精品无码久久久久久久久果冻 | 黄色一级一级 | 亚洲欧美日本在线 | 丝袜老师办公室里做好紧好爽 | 日韩欧美视频在线播放 | 久久成人小视频 | 尤物精品在线 | 91av俱乐部| 中文字幕免费观看 | 波多野吉衣伦理片 | 97在线免费| 玖玖免费| 欧洲金发美女大战黑人 | 中国极品少妇xxxx做受 | 国产做爰xxxⅹ性视频国 | 97青草| 欧美精品毛片 | 一级黄在线观看 | 麻豆国产网站 | 成年人国产 |