Proxy(代理)--对象结构型模式
Proxy(代理)–對(duì)象結(jié)構(gòu)型模式
一、意圖
為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問。
二、動(dòng)機(jī)
1.在面向?qū)ο笙到y(tǒng)中,有些對(duì)象由于某種原因(比如對(duì)象創(chuàng)建的開銷很大,或者某些操作需要安全控制,或者需要進(jìn)程外的訪問等),直接訪問會(huì)給使用者、或者系統(tǒng)結(jié)構(gòu)帶來很大麻煩。
2.如何在不失去透明操作對(duì)象的同時(shí)來管理/控制這些對(duì)象特有的復(fù)雜性?增加一層間接層是軟件開發(fā)中常見的解決方式。
三、適用性
1.遠(yuǎn)程代理(Remote Proxy)為一個(gè)對(duì)象在不同的地址空間提供局部代表。
2.虛代理(Virtual Proxy)根據(jù)需要?jiǎng)?chuàng)建開銷很大的對(duì)象。
3.保護(hù)代理(Protection Proxy)控制對(duì)原始對(duì)象的訪問。
4.智能指引(Smart Reference)取代了簡單的指針,它在訪問對(duì)象時(shí)執(zhí)行一些附加操作。
四、結(jié)構(gòu)
這是運(yùn)行時(shí)刻一種可能的代理結(jié)構(gòu)的對(duì)象圖。
五、效果
Proxy模式在訪問對(duì)象時(shí)引入了一定程度的間接性。
1.Remote Proxy可以隱藏一個(gè)對(duì)象存在于不同地址空間的事實(shí)。
2.Virtual Proxy可以進(jìn)行最優(yōu)化,例如根據(jù)要求創(chuàng)建對(duì)象。
3.Protection Proxies和Smart Reference都允許在訪問一個(gè)對(duì)象時(shí)有一些附加的內(nèi)務(wù)處理。
六、實(shí)現(xiàn)
1.重載C++中的存取運(yùn)算符。
2.Proxy并不總是需要知道實(shí)體的類型。
七、要點(diǎn)總結(jié)
1.“增加一層間接層”是軟件系統(tǒng)中對(duì)許多復(fù)雜問題的一種常見解決方法。在面向?qū)ο笙到y(tǒng)中,直接使用某些對(duì)象會(huì)帶來很多問題,作為間接層的Proxy對(duì)象便是解決這一問題的常用手段。
2.具體proxy設(shè)計(jì)模式的實(shí)現(xiàn)方法、實(shí)現(xiàn)粒度都相差很大,有些可能對(duì)單個(gè)對(duì)象做細(xì)粒度的控制,入copy-on-wirte技術(shù),有些可能對(duì)組件模式提供抽象代理層,在架構(gòu)層次對(duì)對(duì)象做proxy。
3.Proxy并不一定要求保持接口完整的一致性,只要能夠?qū)崿F(xiàn)間接控制,有時(shí)候損及一些透明性是可以接受的。
八、相關(guān)模式
Adapter:適配器Adapter為它所適配的對(duì)象提供一個(gè)不同的接口。想反,代理提供了與它實(shí)體相同的接口。然而,用于訪問保護(hù)的代理可能會(huì)拒絕執(zhí)行實(shí)體會(huì)執(zhí)行的操作,因此,它的接口實(shí)際上可能只是實(shí)體接口的一個(gè)子集。
Decorator:盡管decoratro的實(shí)現(xiàn)部分與代理相似,但decortor的目的不一樣。Decorator為對(duì)象添加一個(gè)或多個(gè)功能,而代理則控制對(duì)對(duì)象的訪問。
代理的實(shí)現(xiàn)與decorator的實(shí)現(xiàn)類似,但是在相似程度傻姑娘有所差別,Protection Proxy的實(shí)現(xiàn)可能與decorator的實(shí)現(xiàn)差不多。另一方面,Remote Proxy不包含對(duì)實(shí)體的直接引用,而只是一個(gè)間接引用,如“主機(jī)ID,主機(jī)的局部地址。”Virtual Proxy開始的時(shí)候使用一個(gè)間接引用,例如一個(gè)文件名,但最終將獲得并使用一個(gè)直接引用。
九、舉例說明
找工作時(shí)找HR就是直接訪問,找獵頭就是代理。
本文為李建忠設(shè)計(jì)模式視頻的筆記以及《設(shè)計(jì)模式-可復(fù)用面向?qū)ο蟮能浖幕A(chǔ)》和自己的部分見解
總結(jié)
以上是生活随笔為你收集整理的Proxy(代理)--对象结构型模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吃藕粉减肥吗
- 下一篇: Chain of responsibil