代理模式與webservice實現
這幾天分析一個我接手的系統,是一個典型的分布式系統。其中有特色的技術就是采用了webservice,webservice從字面上分解就是web service----一個提供web服務的系統,可以通過web方式訪問這些服務。
而從現實中,webservice可以說是一套標準:分布式,跨平臺,跨語言等; 標準實現采用SOAP協議,SOAP
協議是基于流行的XML表達的,具有一個套封envlope, envlope里包含一個必須的body和一個可選的head;
就是在這個body里,我們聲明了訪問的方法、方法的參數或返回值。
webservice實現, C++系統上采用開源的gSoap,而java采用apache的Axis。這兩個框架都提供工具來
生成C++代碼或Java代碼,不管是gSoap或者Axis,他們生成的最終代碼,客戶端只需要調用簡單的對象就
可以訪問服務器,而服務器生成一樣的接口,開發者實現這些接口就行,中間的通訊過程全部由框架解決了。
其實這種技術架構并不新穎,早期的CORBA和DCOM, 后來java的RMI, 這些基本上都是RPC技術,大同
小異而已。而它們的背后設計模式,可以說就是23種模式之一的代理模式Proxy。簡言之就是,一個客戶不想
或者不能直接引用一個對象(接口),而代理對象(接口)可以在客戶端和目標對象之間起到中介作用。
按目的劃分代理模式有8種:
1、遠程代理:為位于不同的地址空間的對象提供一個局域代表對象
2、虛擬代理:根據需要創建一個資源消耗較大的對象,使得此對象只在需要時才會被真正創建
3、Copy-on-Write代理:把復制拖延到只有在客戶需要時才真正采取行動
4、保護代理:控制對象的訪問,提供使用權限檢查
5、Cache代理:為某個目標操作的結果提供臨時的存儲空間,以便多客戶共享
6、防火墻代理:保護目標,防止惡意用戶
7、同步化代理:能同時訪問對象而沒有沖突
8、智能引用代理:提供一些額外操作,如訪問次數統計
顯然RPC方式屬于第1種遠程代理模式。
可以看出,在面對一種技術時,我們從它的定義、實現、引入目的、類似相關技術、背后理論基礎來
細細分析,就比較容易掌握了。