一、代理模式簡介(Brief Introduction)
代理模式(Proxy Pattern)對其他對象提供一種代理以控制對這個對象的訪問。
二、解決的問題(What To Solve)
1、遠程代理
遠程代理,也就是為了一個對象在不同的地址空間提供局部代表。這樣可隱藏一個對象存在與不同地質空間的事實,隱藏對象所在的地址空間。
比如.Net Web Service ,當一個項目在加入一個Web引用,引用Web Service的時候會在項目中生成一個WebReference文件夾和響應的文件,這些文件夾和文件就是代理,?客戶端在調用此代理的時候實際上已經解決了遠程訪問的問題。
2、虛擬代理
虛擬代理,是根據需要創建開銷很大的對象。通過它來存放實例化需要很長時間的真實對象。這樣可以達到最優化的性能。
比如瀏覽器使用代理模式優化網頁下載,也就是首先展示網頁文字,圖片需要一張一張地下載后才能看到。
3、安全代理
安全代理,用來控制真實對象訪問時的權限。一般用于對象應該有不同的訪問權限的時候。
4、智能指引
??????????????智能指引,是指當調用真實的對象時,代理處理另外一些事情。比如,在訪問一個實際對象前,檢查是否已經鎖定它,以確保其他對象不能改變它。也就是在訪問一個對象時附加的一些內務處理。
三、代理模式分析(Analysis)
1、代理模式結構
???????
2、源代碼
1、抽象類?Subject |
public?abstract?class?Subject { ????public??abstract?void?Request(); } |
?
2、真實實體RealSubject?繼承于Subject |
public?class?RealSubject:Subject { ????public?override?void?Request() ????{ ????????Console.WriteLine("對象的真實實體方法在執行。"); ????} } |
?
3、代理類Proxy?繼承于Subject類,同時引用RealSubject類 |
public?class?Proxy:Subject { ????private?RealSubject?realSubject; ????public?override?void?Request() ????{ ????????Console.WriteLine("通過代理類訪問對象真實實體的方法。"); ????????if?(realSubject ==?null) ????????{ ????????????realSubject =?new?RealSubject(); ????????} ????????realSubject.Request(); ????} } |
?
4、客戶端代碼 |
class?Program { ????static?void?Main(string[] args) ????{ ????????Proxy?proxy =?new?Proxy(); ????????proxy.Request(); ????????Console.Read(); ????} } |
3、程序運行結果
四.案例分析(Example)
五、總結(Summary)
代理模式(Proxy Pattern)對其他對象提供一種代理以控制對這個對象的訪問。代理模式分為遠程代理、虛擬代理、安全代理和智能指引。
本文轉自靈動生活博客園博客,原文鏈接:http://www.cnblogs.com/ywqu/archive/2010/01/22/1653875.html?,如需轉載請自行聯系原作者