軟件架構模式之代理模式


代理模式

代理模式用於構造具有解耦組件的分布式系統。這些組件可以通過遠程服務調用彼此交互。代理組件負責組件之間的通信協調。服務器將其功能(服務和特征)發布給代理。客戶端從代理請求服務,然后代理將客戶端重定向到其注冊中心的適當服務。代理者(Broker)模式可以用於構建帶有隔離組件的分布式軟件,該軟件通過遠程服務調用進行交互。
使用場景:

在客戶端不能直接訪問組件的情況下,通過代理組件進行訪問。大致的使用環境,分為以下三類:1.直接訪問IP或者組件不安全;2.訪問次數特別多;3.對某些網站沒有訪問權限。

總的來說代理模式作為軟件架構模式的常用模式,應用的范圍還是十分的廣泛:

  (1) 當客戶端對象需要訪問遠程主機中的對象時可以使用遠程代理。

   (2) 當需要用一個消耗資源較少的對象來代表一個消耗資源較多的對象,從而降低系統開銷、縮短運行時間時可以使用虛擬代理,例如一個對象需要很長時間才能完成加載時。

  (3) 當需要為某一個被頻繁訪問的操作結果提供一個臨時存儲空間,以供多個客戶端共享訪問這些結果時可以使用緩沖代理。通過使用緩沖代理,系統無須在客戶端每一次訪問時都重新執行操作,只需直接從臨時緩沖區獲取操作結果即可。

  (4) 當需要控制對一個對象的訪問,為不同用戶提供不同級別的訪問權限時可以使用保護代理。

  (5) 當需要為一個對象的訪問(引用)提供一些額外的操作時可以使用智能引用代理。

  所以我們如果要進行軟件架構使用代理模式去應用特定的場景,一定要選擇正確的方法,會讓我們的架構使得項目變得更加簡單。

       解決的問題:在環境處於情況1時,會有以下幾個問題:在訪問某些網站時,不想透露自己真實的IP,上網者也希望通過這種方法隱藏自己的IP,免受攻擊;對組件直接訪問不安全。在環境處於情況2時,會有以下幾個問題:對組件的無限制訪問低效,需要控制機制(代理模式)。在環境處於情況3時,會有以下幾個問題:自身IP訪問受限,希望突破自身IP訪問限制,訪問不能訪問的站點,例如一些教育網站。單位或團體資源無法訪問,如某大學FTP(前提是該代理地址在該資源 的允許訪問范圍之內)。使用教育網內地址段免費代理服務器,就可以用於對教育網開放的各類FTP下載上傳,以及各類資料查詢共享等服務。

       解決方案:讓客戶機通過組件代表訪問,而不是通過組件本身進行訪問,這種中間的代表組件就是代理,代理提供了原件相同的接口,而且保證了對原件的正確訪問,為了完成這種功能,代理保持對它所表示的原件的作用。

 

 

      應用實例: 1、Windows 里面的快捷方式。 2、豬八戒去找高翠蘭結果是孫悟空變的,可以這樣理解:把高翠蘭的外貌抽象出來,高翠蘭本人和孫悟空都實現了這個接口,豬八戒訪問高翠蘭的時候看不出來這個是孫悟空,所以說孫悟空是高翠蘭代理類。 3、買火車票不一定在火車站買,也可以去代售點。 4、一張支票或銀行存單是賬戶中資金的代理。支票在市場交易中用來代替現金,並提供對簽發人賬號上資金的控制。 5、spring aop。

補充:

        如果那個對象是一個是很大的圖片,需要花費很長時間才能顯示出來,那么當這個圖片包含在文檔中時,使用編輯器或瀏覽器打開這個文檔,打開文檔必須很迅速,不能等待大圖片處理完成,這時需要做個圖片Proxy來代替真正的圖片.
     
     如果那個對象在Internet的某個遠端服務器上,直接操作這個對象因為網絡速度原因可能比較慢,那我們可以先用Proxy來代替那個對象.
     
     總之原則是,對於開銷很大的對象,只有在使用它時才創建,這個原則可以為我們節省很多寶貴的Java內存. 所以,有些人認為Java耗費資源內存,我以為這和程序編制思路也有一定的關系.

(3)現實中,Proxy應用范圍很廣,現在流行的分布計算方式RMI和Corba等都是Proxy模式的應用

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM