定義:代理模式為其他對象提供一種代理以控制對這個對象的通路。
一般代理分為幾種:
1、遠端代理,也就是為一個對象在不同的位址空間提供局部代表,這樣可以隐藏一個對象存在于不同位址空間的事實。
比如WebService在.Net 中的調用
2、虛拟代理,是根據需要建立開銷很大的對象。通過它來存放執行個體化需要很長時間的真實對象。
這樣就可以達到性能的最大化,比如說你打開一個很大的HTML網頁時,裡面可能有很多的文字和圖檔,但你還是可以很快的打開它,此時你所看到的是所有的文字,但是圖檔确實一張一張的下載下傳後才能看到。那些未打開的圖檔框,就是通過虛拟代理來體代理真實的圖檔,此時代理存儲了真實的圖檔的路徑和尺寸。
3、安全代理,用來控制真實對象通路時的權限。
一般用于對象應該有不同的通路權限的時候。
4、智能指引,是指當調用真實對象時,代理處理另外一些事。
如計算真是對象的引用次數,這樣當該對象沒有引用時,可以自動釋放它,或當第一次引用一個持久對象時,将它裝入記憶體,或在通路一個實際對象前,檢查是否已經鎖定它,以確定其他對象不能改變它。它們都是通過代理在通路一個對象時附加一些内務處理。
/// <summary>
/// 定義了RealSubject和Proxy的共用接口,這樣就在任何使用RealSubject的地方都可以使用Proxy
/// </summary>
public abstract class Subject
{
public abstract void Request();
}
/// <summary>
/// 定義了Proxy所代表的真實實體
/// </summary>
public class RealSubject : Subject
{
public override void Request()
{
Console.WriteLine("真實的請求");
}
}
/// <summary>
/// 儲存一個引用使得代理可以通路實體,并提供一個與Subject的接口相同的接口,這樣代理就可以用來替代實體。
/// </summary>
public class Proxy : Subject
{
RealSubject realSubject;
public override void Request()
{
if (realSubject == null)
realSubject = new RealSubject();
realSubject.Request();
}
}
用戶端代碼
Proxy p = new Proxy();
p.Request();
Console.ReadLine();
結果