定義
代理模式(Proxy Pattern) :為某個對象提供一個代理,并由這個代理對象控制對原對象的訪問。
定義解讀:使用代理模式以后,客戶端直接訪問代理,代理在客戶端和目標對象之間起到中介的作用。
適用場景
在某些情況下,一個客戶不想或者不能直接引用一個對象,此時可以通過一個稱之為“代理”的第三者來實現間接引用。
因為代理對象可以在客戶端和目標對象之間起到中介的作用,因此可以通過代理對象去掉客戶不能看到 的內容和服務或者添加客戶需要的額外服務。
根據業務的不同,代理也可以有不同的類型:
遠程代理:為位于不同地址或網絡化中的對象提供本地代表。
虛擬代理:根據要求創建重型的對象。
保護代理:根據不同訪問權限控制對原對象的訪問。
下面來看一下代理模式的成員和類圖。
成員
代理模式算上客戶端一共有四個成員:
客戶端(Client):客戶端意圖訪問真是主體接口
抽象主題(Subejct):抽象主題定義客戶端需要訪問的接口
代理(Proxy):代理繼承于抽象主題,目的是為了它持有真實目標的實例的引用,客戶端直接訪問代理
真實主題(RealSubject):真實主題即是被代理的對象,它也繼承于抽象主題,它的實例被代理所持有,它的接口被包裝在了代理的接口中,而且客戶端無法直接訪問真實主題對象。
優點
降低系統的耦合度:代理模式能夠協調調用者和被調用者,在一定程度上降低了系統的耦合度。
不同類型的代理可以對客戶端對目標對象的訪問進行不同的控制:
遠程代理,使得客戶端可以訪問在遠程機器上的對象,遠程機器 可能具有更好的計算性能與處理速度,可以快速響應并處理客戶端請求。
虛擬代理通過使用一個小對象來代表一個大對象,可以減少系統資源的消耗,對系統進行優化并提高運行速度。
保護代理可以控制客戶端對真實對象的使用權限。
缺點
由于在客戶端和被代理對象之間增加了代理對象,因此可能會讓客戶端請求的速度變慢。