代理模式用於構造具有解耦組件的分布式系統。這些組件可以通過遠程服務調用彼此交互。代理組件負責組件之間的通信協調。服務器將其功能(服務和特征)發布給代理。客戶端從代理請求服務,然后代理將客戶端重定向到其注冊中心的適當服務。代理者(Broker)模式可以用於構建帶有隔離組件的分布式軟件,該軟件通過遠程服務調用進行交互。
使用場景:在客戶端不能直接訪問組件的情況下,通過代理組件進行訪問。大致的使用環境,分為一下三類:1.直接訪問IP或者組件不安全;2.訪問次數特別多;3.對某些網站沒有訪問權限。
將要解決的問題:在環境處於情況1時,會有以下幾個問題:在訪問某些網站時,不想透露自己真實的IP,上網者也希望通過這種方法隱藏自己的IP,免受攻擊;對組件直接訪問不安全。在環境處於情況2時,會有以下幾個問題:對組件的無限制訪問低效,需要控制機制(代理模式)。在環境處於情況3時,會有以下幾個問題:自身IP訪問受限,希望突破自身IP訪問限制,訪問不能訪問的站點,例如一些教育網站。單位或團體資源無法訪問,如某大學FTP(前提是該代理地址在該資源 的允許訪問范圍之內)。使用教育網內地址段免費代理服務器,就可以用於對教育網開放的各類FTP下載上傳,以及各類資料查詢共享等服務。
解決方案:讓客戶機通過組件代表訪問,而不是通過組件本身進行訪問,這種中間的代表組件就是代理,代理提供了原件相同的接口,而且保證了對原件的正確訪問,為了完成這種功能,代理保持對它所表示的原件的作用。
實例:假設要做一個電子商務的系統,這個系統無疑需要展示商品、提供購買流程。同時這個系統也需要有針對供應商的訂貨、發貨、入賬等流程。除了交易處理,還需要有評價系統管理信用;統計和推薦系統增加銷售量;用戶帳號系統保障安全和便利等等。這些模塊和功能一般比較復雜,但是一般涉及到買家和賣家兩個角色,因此往往根據這個規則,划定了兩類模塊,分別實施其功能,最后通過一個數據平台來存儲這些數據。
一種情況是你需要調用的對象在另外一台機器上,你需要跨越網絡才能訪問,如果讓你直接coding去調用,你需要處理網絡連接、處理打包、解包等等非常復雜的步驟,所以為了簡化客戶端的處理,我們使用代理模式,在客戶端建立一個遠程對象的代理,客戶端就象調用本地對象一樣調用該代理,再由代理去跟實際對象聯系,對於客戶端來說可能根本沒有感覺到調用的東西在網絡另外一端,這實際上就是Web Service的工作原理。另一種情況雖然你所要調用的對象就在本地,但是由於調用非常耗時,你怕影響你正常的操作,所以特意找個代理來處理這種耗時情況,一個最容易理解的就是Word里面裝了很大一張圖片,在word被打開的時候我們肯定要加載里面的內容一起打開,但是如果等加載完這個大圖片再打開Word用戶等得可能早已經跳腳了,所以我們可以為這個圖片設置一個代理,讓代理慢慢打開這個圖片而不影響Word本來的打開的功能。