代理(Proxy)模式

代理(Proxy)模式

ID:37248188

大?。?24.00 KB

頁(yè)數(shù):8頁(yè)

時(shí)間:2019-05-20

代理(Proxy)模式_第1頁(yè)
代理(Proxy)模式_第2頁(yè)
代理(Proxy)模式_第3頁(yè)
代理(Proxy)模式_第4頁(yè)
代理(Proxy)模式_第5頁(yè)
資源描述:

《代理(Proxy)模式》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、C#設(shè)計(jì)模式(13)-ProxyPattern一、?代理(Proxy)模式代理(Proxy)模式給某一個(gè)對(duì)象提供一個(gè)代理,并由代理對(duì)象控制對(duì)原對(duì)象的引用。代理模式的英文叫做Proxy或Surrogate,中文都可譯成"代理"。所謂代理,就是一個(gè)人或者一個(gè)機(jī)構(gòu)代表另一個(gè)人或者另一個(gè)機(jī)構(gòu)采取行動(dòng)。在一些情況下,一個(gè)客戶不想或者不能夠直接引用一個(gè)對(duì)象,而代理對(duì)象可以在客戶端和目標(biāo)對(duì)象之間起到中介的作用。二、?代理的種類如果按照使用目的來(lái)劃分,代理有以下幾種:遠(yuǎn)程(Remote)代理:為一個(gè)位于不同的地址空間的對(duì)象提供一個(gè)局域代表對(duì)象。這

2、個(gè)不同的地址空間可以是在本機(jī)器中,也可是在另一臺(tái)機(jī)器中。遠(yuǎn)程代理又叫做大使(Ambassador)。虛擬(Virtual)代理:根據(jù)需要?jiǎng)?chuàng)建一個(gè)資源消耗較大的對(duì)象,使得此對(duì)象只在需要時(shí)才會(huì)被真正創(chuàng)建。Copy-on-Write代理:虛擬代理的一種。把復(fù)制(克?。┩涎拥街挥性诳蛻舳诵枰獣r(shí),才真正采取行動(dòng)。保護(hù)(ProtectorAccess)代理:控制對(duì)一個(gè)對(duì)象的訪問(wèn),如果需要,可以給不同的用戶提供不同級(jí)別的使用權(quán)限。Cache代理:為某一個(gè)目標(biāo)操作的結(jié)果提供臨時(shí)的存儲(chǔ)空間,以便多個(gè)客戶端可以共享這些結(jié)果。防火墻(Firewall)

3、代理:保護(hù)目標(biāo),不讓惡意用戶接近。同步化(Synchronization)代理:使幾個(gè)用戶能夠同時(shí)使用一個(gè)對(duì)象而沒(méi)有沖突。智能引用(SmartReference)代理:當(dāng)一個(gè)對(duì)象被引用時(shí),提供一些額外的操作,如將對(duì)此對(duì)象調(diào)用的次數(shù)記錄下來(lái)等。在所有種類的代理模式中,虛擬(Virtual)代理、遠(yuǎn)程(Remote)代理、智能引用代理(SmartReferenceProxy)和保護(hù)(ProtectorAccess)代理是最為常見(jiàn)的代理模式。三、?遠(yuǎn)程代理的例子Achilles是一個(gè)用來(lái)測(cè)試網(wǎng)站的安全性能的工具軟件。Achilles相當(dāng)

4、于位于客戶端的的一個(gè)桌面代理服務(wù)器,在一個(gè)HTTP過(guò)程里起到一個(gè)中間人的作用,但是Achilles與通常的代理服務(wù)器又有不同。Achilles截獲雙向的通信數(shù)據(jù),使得Achilles軟件的用戶可以改變來(lái)自和發(fā)往網(wǎng)絡(luò)服務(wù)器的數(shù)據(jù),甚至可以攔截并修改SSL通訊。(這點(diǎn)在《Java與模式》中解釋的不是很清楚,關(guān)于對(duì)非對(duì)稱密鑰加密攔截、破解方法,可以參考我的另外一篇文章《通過(guò)代理截取并修改非對(duì)稱密鑰加密信息》)。另外一個(gè)例子就是Windows的快捷方式。快捷方式是它所引用的程序的一個(gè)代理。四、?代理模式的結(jié)構(gòu)代理模式的類圖如下圖所示:代理

5、模式所涉及的角色有:抽象主題角色(Subject):聲明了真實(shí)主題和代理主題的共同接口,這樣一來(lái)在任何使用真實(shí)主題的地方都可以使用代理主題。代理主題(Proxy)角色:代理主題角色內(nèi)部含有對(duì)真實(shí)主題的引用,從而可以在任何時(shí)候操作真實(shí)主題對(duì)象;代理主題角色提供一個(gè)與真實(shí)主題角色相同的接口,以便可以在任何時(shí)候都可以替代真實(shí)主體;控制真實(shí)主題的應(yīng)用,負(fù)責(zé)在需要的時(shí)候創(chuàng)建真實(shí)主題對(duì)象(和刪除真實(shí)主題對(duì)象);代理角色通常在將客戶端調(diào)用傳遞給真實(shí)的主題之前或之后,都要執(zhí)行某個(gè)操作,而不是單純的將調(diào)用傳遞給真實(shí)主題對(duì)象。真實(shí)主題角色(RealS

6、ubject)角色:定義了代理角色所代表的真實(shí)對(duì)象。五、?代理模式示例性代碼以下示例性代碼實(shí)現(xiàn)了代理模式://?Proxy?pattern?--?Structural?example??using?System;//?"Subject"abstract?class?Subject{??//?Methods??abstract?public?void?Request();}//?"RealSubject"class?RealSubject?:?Subject{??//?Methods??override?public?void?Re

7、quest()??{????Console.WriteLine("Called?RealSubject.Request()");??}}//?"Proxy"class?Proxy?:?Subject{??//?Fields??RealSubject?realSubject;??//?Methods??override?public?void?Request()??{????//?Uses?"lazy?initialization"????if(?realSubject?==?null?)??????realSubject?=?ne

8、w?RealSubject();????preRequest();????realSubject.Request();????postRequest();??}??public?void?preRequest()??{?Console.WriteL

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。