定義
代理模式(Proxy Pattern) :為某個對象提供一個代理,并由這個代理對象控制對原對象的訪問顿仇。
定義解讀:使用代理模式以后淘正,客戶端直接訪問代理摆马,代理在客戶端和目標對象之間起到中介的作用。
適用場景
在某些情況下鸿吆,一個客戶不想或者不能直接引用一個對象囤采,此時可以通過一個稱之為“代理”的第三者來實現(xiàn)間接引用。
因為代理對象可以在客戶端和目標對象之間起到中介的作用惩淳,因此可以通過代理對象去掉客戶不能看到 的內(nèi)容和服務或者添加客戶需要的額外服務蕉毯。
根據(jù)業(yè)務的不同,代理也可以有不同的類型:
遠程代理:為位于不同地址或網(wǎng)絡化中的對象提供本地代表思犁。
虛擬代理:根據(jù)要求創(chuàng)建重型的對象代虾。
保護代理:根據(jù)不同訪問權(quán)限控制對原對象的訪問。
下面來看一下代理模式的成員和類圖激蹲。
成員
代理模式算上客戶端一共有四個成員:
客戶端(Client):客戶端意圖訪問真是主體接口
抽象主題(Subejct):抽象主題定義客戶端需要訪問的接口
代理(Proxy):代理繼承于抽象主題棉磨,目的是為了它持有真實目標的實例的引用,客戶端直接訪問代理
真實主題(RealSubject):真實主題即是被代理的對象托呕,它也繼承于抽象主題含蓉,它的實例被代理所持有,它的接口被包裝在了代理的接口中项郊,而且客戶端無法直接訪問真實主題對象馅扣。
優(yōu)點
降低系統(tǒng)的耦合度:代理模式能夠協(xié)調(diào)調(diào)用者和被調(diào)用者,在一定程度上降低了系統(tǒng)的耦合度着降。
不同類型的代理可以對客戶端對目標對象的訪問進行不同的控制:
遠程代理,使得客戶端可以訪問在遠程機器上的對象差油,遠程機器 可能具有更好的計算性能與處理速度,可以快速響應并處理客戶端請求任洞。
虛擬代理通過使用一個小對象來代表一個大對象蓄喇,可以減少系統(tǒng)資源的消耗,對系統(tǒng)進行優(yōu)化并提高運行速度交掏。
保護代理可以控制客戶端對真實對象的使用權(quán)限妆偏。
缺點
由于在客戶端和被代理對象之間增加了代理對象,因此可能會讓客戶端請求的速度變慢盅弛。