代理(Proxy)模式
代理(Proxy)模式
代理(Proxy)模式給某一個對象提供一個代理,并由代理對象控制對原對象的引用。
代理模式的英文叫做Proxy或Surrogate,中文都可譯成"代理"。所謂代理,就是一個人或者一個機(jī)構(gòu)代表另一個人或者另一個機(jī)構(gòu)采取行動。在一些情況下,一個客戶不想或者不能夠直接引用一個對象,而代理對象可以在客戶端和目標(biāo)對象之間起到中介的作用。
代理的種類
如果按照使用目的來劃分,代理有以下幾種:
- 遠(yuǎn)程(Remote)代理:為一個位于不同的地址空間的對象提供一個局域代表對象。這個不同的地址空間可以是在本機(jī)器中,也可是在另一臺機(jī)器中。遠(yuǎn)程代理又叫做大使(Ambassador)。
- 虛擬(Virtual)代理:根據(jù)需要創(chuàng)建一個資源消耗較大的對象,使得此對象只在需要時才會被真正創(chuàng)建。
- Copy-on-Write代理:虛擬代理的一種。把復(fù)制(克隆)拖延到只有在客戶端需要時,才真正采取行動。
- 保護(hù)(Protect or Access)代理:控制對一個對象的訪問,如果需要,可以給不同的用戶提供不同級別的使用權(quán)限。
- Cache代理:為某一個目標(biāo)操作的結(jié)果提供臨時的存儲空間,以便多個客戶端可以共享這些結(jié)果。
- 防火墻(Firewall)代理:保護(hù)目標(biāo),不讓惡意用戶接近。
- 同步化(Synchronization)代理:使幾個用戶能夠同時使用一個對象而沒有沖突。
- 智能引用(Smart Reference)代理:當(dāng)一個對象被引用時,提供一些額外的操作,比如將對此對象調(diào)用的次數(shù)記錄下來等。
在所有種類的代理模式中,虛擬(Virtual)代理、遠(yuǎn)程(Remote)代理、智能引用代理(Smart Reference Proxy)和保護(hù)(Protect or Access)代理是最為常見的代理模式。
遠(yuǎn)程代理的例子
Achilles是一個用來測試網(wǎng)站的安全性能的工具軟件。Achilles相當(dāng)于位于客戶端的的一個桌面代理服務(wù)器,在一個HTTP過程里起到一個中間人的作用,但是Achilles與通常的代理服務(wù)器又有不同。Achilles截獲雙向的通信數(shù)據(jù),使得Achilles軟件的用戶可以改變來自和發(fā)往網(wǎng)絡(luò)服務(wù)器的數(shù)據(jù),甚至可以攔截并修改SSL通訊。(這點在《Java與模式》中解釋的不是很清楚,關(guān)于對非對稱密鑰加密攔截、破解方法,可以參考我的另外一篇文章《通過代理截取并修改非對稱密鑰加密信息》)。
另外一個例子就是Windows的快捷方式。快捷方式是它所引用的程序的一個代理。
代理模式的結(jié)構(gòu)
代理模式的類圖如下圖所示:
代理模式所涉及的角色有:
抽象主題角色(Subject):聲明了真實主題和代理主題的共同接口,這樣一來在任何使用真實主題的地方都可以使用代理主題。
代理主題(Proxy)角色:代理主題角色內(nèi)部含有對真是主題的引用,從而可以在任何時候操作真實主題對象;代理主題角色提供一個與真實主題角色相同的接口,以便可以在任何時候都可以替代真實主體;控制真實主題的應(yīng)用,負(fù)責(zé)在需要的時候創(chuàng)建真實主題對象(和刪除真實主題對象);代理角色通常在將客戶端調(diào)用傳遞給真實的主題之前或之后,都要執(zhí)行某個操作,而不是單純的將調(diào)用傳遞給真實主題對象。
真實主題角色(RealSubject)角色:定義了代理角色所代表的真實對象。
轉(zhuǎn)載于:https://www.cnblogs.com/wenly/archive/2008/05/31/1211045.html
總結(jié)
以上是生活随笔為你收集整理的代理(Proxy)模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 改变NumericStepper控件上下
- 下一篇: 新版数采仪问题解决全记录-升级失败问题