軟件架構模式之代理模式

代理模式html

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

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

總的來講代理模式做爲軟件架構模式的經常使用模式,應用的範圍仍是十分的普遍:安全

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

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

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

  (4) 當須要控制對一個對象的訪問,爲不一樣用戶提供不一樣級別的訪問權限時可使用保護代理。編輯器

  (5) 當須要爲一個對象的訪問(引用)提供一些額外的操做時可使用智能引用代理。分佈式

  因此咱們若是要進行軟件架構使用代理模式去應用特定的場景,必定要選擇正確的方法,會讓咱們的架構使得項目變得更加簡單。網站

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

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

 

 

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

補充:

        若是那個對象是一個是很大的圖片,須要花費很長時間才能顯示出來,那麼當這個圖片包含在文檔中時,使用編輯器或瀏覽器打開這個文檔,打開文檔必須很迅速,不能等待大圖片處理完成,這時須要作個圖片Proxy來代替真正的圖片.
     
     若是那個對象在Internet的某個遠端服務器上,直接操做這個對象由於網絡速度緣由可能比較慢,那咱們能夠先用Proxy來代替那個對象.
     
     總之原則是,對於開銷很大的對象,只有在使用它時才建立,這個原則能夠爲咱們節省不少寶貴的Java內存. 因此,有些人認爲Java耗費資源內存,我覺得這和程序編制思路也有必定的關係.(3)現實中,Proxy應用範圍很廣,如今流行的分佈計算方式RMI和Corba等都是Proxy模式的應用

相關文章
相關標籤/搜索