proxy(代理)模式

<簡介>
普通對象所需要完成的任務是通過公共接口爲外界提供自己所承諾的服務。然而,有時候合法的對象可能會因爲各種原因
而無法完成自己常規的任務。尤其是當對象需要很長時間才能載入內存、對象正運行在另一臺計算機上或者需要獲取對象
消息的時候,這種情況就會頻繁出現。在這種情況下,我們可以使用一個代理對象,由它來承擔客戶期待的責任,並將請
求轉發給其背後的目標對象。

<意圖>
爲對象提供一個代理或者佔位(placeholder)來控制對該對象的訪問。

<典型應用RMI>
如果期望調用正在另一臺計算機上運行的對象的方法,那麼必須找到一種方法來與該遠程對象進行通信,而不能直接調用
其方法。我們可以在遠程機器上打開一個Socket,並設計一種協議用於向該遠程對象發送消息。理想情況下,這種方案可
以讓我們自己地與遠程對象通信,就像與本地對象通信一樣。在這種方案下使用Proxy模式,可直接調用位於本地的代理
對象的方法,該代理對象將調用請求發給遠程對象。實際上,著名的公共對象請求代理架構(CORBA)、ASP.NET以及Java
的遠程方法調用(RMI)已經實現了這種方案。
在RMI中,代理對象用於將調用請求轉發給在另一臺計算機上運行的指定對象,客戶可以很容易地獲得這種代理對象。發論
業界標準如何發展,未來的分佈式計算仍將離不開Proxy模式。

<說明>
代理模式充許代理類通過實現與被代理類相同的接口(或提供相同的接口)的方式來使客戶間接地訪問被代理類的對象,不
論被代理類對象是否可以直接訪問或暫時無法訪問,代理類對象都可以使得客戶“感覺”它就在訪問這個對象一樣。因爲它“
代理”目標對象完成了客戶所要求的操作。

<動態代理>
在java中,動態代理技術使我們能夠使用代理對象包裝其他對象、截獲對被包裝對象的調用、在調用傳遞前和傳遞後增加
其他操作等,這樣可以比較隨意地給任何對象增加可複用的行爲。

<小結>
Proxy模式的實現要求建立一個佔位對象,用於控制對目標對象的訪問。這樣客戶端就無需瞭解目標對象的狀態變化。就像
加載一個圖像需要耗費一定時間時,我們可以使用Proxy模式改善用戶體驗。但Proxy模式本身存在代理對象與被代理對象
之間耦合度過緊的問題。在Java中,動態代理有時可以提供一種增加可複用功能的機制。如果某對象的類可實現要截獲的接
口,可以使用動態代理包裝該對象,增加自己的處理邏輯,以增強或者替換被包裝對象代碼的功能。
 

發佈了35 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章