1. 程式人生 > >淺談代理模式

淺談代理模式

頻繁 共享訪問 廣泛 間接 架構 創建 提供服務 執行命令 人員

代理模式用於構造具有解耦組件的分布式系統。這些組件可以通過遠程服務調用彼此交互。代理組件負責組件之間的通信協調。
服務器將其功能(服務和特征)發布給代理。客戶端從代理請求服務,然後代理將客戶端重定向到其註冊中心的適當服務。
使用場景:
? 消息代理軟件,如Apache ActiveMQ,Apache Kafka,RabbitMQ和JBoss Messaging


代理模式用於在結構化系統中對組件解耦。系統內各組件間采用遠過程調用的方式交互。代理組件充當組件間通訊的協調角色。提供服務的組件將其能力(服務以及特性)發布給代理,客戶端均向代理請求服務,由代理將請求重定向到先前已發布過對應服務的組件進行處理。
代理模式在軟件架構上具有非常明顯的特點,優點與缺點都是十分的突出。
代理模式的優點:
(1)通過一個代理對象完成一系列的處理,在將來的程序改動中,就會允許動態更改、添加、刪除和重新定位對象,這使開發人員的發布變得透明,符合開閉原則。
(2)代理模式能夠協調調用者和被調用者,在一定程度上降低了系統的耦合度。
(3)遠程代理使得客戶端可以訪問在遠程機器上的對象,遠程機器可能具有更好的計算機性能與處理速度,可以快速響應並處理客戶端請求。
(4)代理模式在架構中還可以讓虛擬代理通過使用一個小對象來代表一個大對象,可以減少系統資源的消耗,對系統進行優化並提高運行速度。
另外代理模式的缺點也是很突出的。
代理模式的缺點:
  (1)要求對服務描述進行標準化,我們要使用代理模式時則需要考慮異步處理機制、協議創建流程和錯誤環境控制,比較的繁瑣。
(2)由於在客戶端和真實主題之間增加了代理對象,因此有些類型的代理模式可能會造成請求的處理速度變慢。
(3)實現代理模式需要額外的工作,有些代理模式的實現非常復雜。這些問題就造成了不易開發的弱點。
  代理模式是通過引入代理對象來間接訪問一個對象,代理模式可以在客戶端和目標對象中起到一個中介的作用,並且可以通過代理對象去掉客戶不能看到的內容和服務或者添加客戶需要的額外服務。
  代理模式在java框架中也有應用,例如spring中AOP技術就是代理模式的應用,只不過是應用較為高級的動態代理模式。另外EJB、Web Service等分布式技術都是代理模式的應用。其實在設計模式中也有代理模式,這就需要分別以下兩者的區別,設計模式是架構的手段(之一)。軟件架構 :一般場景下擁有設計的選擇權;設計模式 :選擇後特定場景下的最佳實踐,兩者的範圍還是有很大的差別的,另外我認為如果把做一個項目當成一場戰爭的話,那麽架構就是這場戰爭的總元帥,而設計模式只是執行命令的一位將軍。
  總的來說代理模式作為軟件架構模式的常用模式,應用的範圍還是十分的廣泛:
   (1) 當客戶端對象需要訪問遠程主機中的對象時可以使用遠程代理。
  (2) 當需要用一個消耗資源較少的對象來代表一個消耗資源較多的對象,從而降低系統開銷、縮短運行時間時可以使用虛擬代理,例如一個對象需要很長時間才能完成加載時。
   (3) 當需要為某一個被頻繁訪問的操作結果提供一個臨時存儲空間,以供多個客戶端共享訪問這些結果時可以使用緩沖代理。通過使用緩沖代理,系統無須在客戶端每一次訪問時都重新執行操作,只需直接從臨時緩沖區獲取操作結果即可。
  (4) 當需要控制對一個對象的訪問,為不同用戶提供不同級別的訪問權限時可以使用保護代理。
  (5) 當需要為一個對象的訪問(引用)提供一些額外的操作時可以使用智能引用代理。
  所以我們如果要進行軟件架構使用代理模式去應用特定的場景,一定要選擇正確的方法,會讓我們的架構使得項目變得更加簡單。

淺談代理模式