代理模式 - OK

  代理模式(Proxy),爲其餘對象提供一種代理以控制對這個對象的訪問。javascript

  在某些狀況下,一個對象不適合或者不能直接引用另外一個對象,而代理對象能夠在客戶端和目標對象之間起到中介的做用。html

  代理模式的優勢:java

  (1)、職責清晰,真實的角色就是實現實際的業務邏輯,不用關心其餘非本職責的事務,經過後期的代理完成一件完成事務,附帶的結果就是編程簡潔清晰。
  (2)、代理對象能夠在客戶端和目標對象之間起到中介的做用,這樣起到了的做用和保護了目標對象的做用。
  (3)、高擴展性git

  代理模式的UML圖:編程

      

    代碼示例:設計模式

複製代碼
namespace ConsoleApplication1
{
    abstract class Subject
    {
        public abstract void Request();
    }

    class RealSubject : Subject
    {
        public override void Request()
        {
            Console.WriteLine("真實的請求!");
        }
    }

    //代理類
    class Proxy : Subject 
    {
        RealSubject realSubject;        //用於裝載真實對象
        public override void Request()
        {
            if (realSubject == null)
            {
                realSubject = new RealSubject();    //得到真實對象
            }
            realSubject.Request();      //調用真實對象的請求方法
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Proxy proxy = new Proxy();
            proxy.Request();    //輸出真實的請求

            Console.ReadKey();
        }
    }  
}
複製代碼

  從代碼來看,代理模式的思想是很簡單的,難度應該在怎麼靈活應用上。安全

複製代碼
namespace 代理模式
{
    class Program
    {
        static void Main(string[] args)
        {
            小夫 proxy = new 小夫();
            proxy.Hit();    //輸出真實的請求

            Console.ReadKey();
        }
    }

    abstract class Subject
    {
        public abstract void Hit();
    }

    class 胖虎 : Subject
    {
        public override void Hit()
        {
            Console.WriteLine("揍大雄!");

            //Type t = this.GetType();
            //Console.WriteLine("揍大雄的人是:" + t.Name);
        }
    }

    //代理類
    class 小夫 : Subject
    {
        胖虎 realSubject;        //把胖虎放到小夫家
        public override void Hit()
        {
            if (realSubject == null)
            {
                realSubject = new 胖虎();    //胖虎來了
            }
            realSubject.Hit();      //讓胖虎揍大雄
        }
    }
}
複製代碼

  

  典型的應用場景是,當真正的處理類不方便使用時,就能夠使用代理模式。ide

  1. 遠程代理,也就是爲一個對象在不一樣的地址空間提供局部表明。這樣能夠隱藏一個對象存在於不一樣地址空間的事實。
  2. 虛擬代理,是根據須要建立開銷很大的對象。經過它來存放實例化須要很長時間的真實對象。
  3. 安全代理,用來控制真實對象的訪問權限,例如上面的代理類沒有送巧克力,這樣送巧克力的權限就沒有了。
  4. 智能指引,是指當調用真實的對象時,代理處理另一些事。
 
 
分類: 設計模式
 
0
0
 
(請您對文章作出評價)
 
« 上一篇: 裝飾者模式 - OK
» 下一篇: 工廠方法模式 - OK
相關文章
相關標籤/搜索