一、代理模式簡介(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