第 7 章 代理模式

定義:代理模式爲其餘對象提供一種 代理以控制對這個對象的訪問。
 
通常代理分爲幾種:
一、 遠程代理也就是爲一個對象在不一樣的地址空間提供局部表明,這樣能夠隱藏一個對象存在於不一樣地址空間的事實。
好比WebService在.Net 中的調用
二、 虛擬代理是根據須要建立開銷很大的對象。經過它來存放實例化須要很長時間的真實對象。
這樣就能夠達到性能的最大化,好比說你打開一個很大的HTML網頁時,裏面可能有不少的文字和圖片,但你仍是能夠很快的打開它,此時你所看到的是全部的文字,可是圖片確實一張一張的下載後才能看到。那些未打開的圖片框,就是經過虛擬代理來體代理真實的圖片,此時代理存儲了真實的圖片的路徑和尺寸。
三、 安全代理用來控制真實對象訪問時的權限。
通常用於對象應該有不一樣的訪問權限的時候。
四、 智能指引是指當調用真實對象時,代理處理另一些事。
如計算真是對象的引用次數,這樣當該對象沒有引用時,能夠自動釋放它,或當第一次引用一個持久對象時,將它裝入內存,或在訪問一個實際對象前,檢查是否已經鎖定它,以確保其餘對象不能改變它。它們都是經過代理在訪問一個對象時附加一些內務處理。
 
 /// <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();

結果ide

 

 

相關文章
相關標籤/搜索