代理模式

Proxy Pattern

為另一個對象提供一個替身或佔位符以控制這個對象的訪問。

Example: 快取代理


代理模式將類別分為兩類:
分別是 實體類別 (RealSubject)代理類別 (Proxy)

代理類別會與實體類別實現相同的介面
保存對實體類別的引用。


優點
控制訪問的職責,不必寫在實體類別。
有了代理類別,可以 延遲實例化 (lazy initialization) 實體類別。
可以有多種控制訪問實體類別的方式。
可以在實體類別被訪問時,做一些額外的事(不屬於實體類別的職責)。

缺點
程式碼複雜度提高。
回應可能會有所延遲。


與其他模式的比較:

[轉接頭模式]:
轉接頭模式只負責轉化不同介面間的關係。
而代理模式則是實現相同的介面,處理更多訪問相關的職責。

[裝飾者模式]:
裝飾者模式豐富既有行為時,原因較常是來自客戶端
而代理模式豐富既有行為時,原因較常是來自服務端

[外觀模式]:
外觀模式的目的是提供簡化接口
而代理模式的目的則是控制訪問行為


常見的使用場景:

  1. 遠端代理:控制訪問遠程對象,利用網路轉發到遠程執行。
  2. 虛擬代理:控制訪問創建開銷大的對象,待客戶端有請求時才進行實例化。
  3. 安全代理:控制訪問對象的許可權
  4. 智慧代理:處理訪問對象時,不屬於訪問對象的職責。

ʕ •ᴥ•ʔ:當想控制訪問對象時,很可能就是使用代理模式的時機。

Share