大話設計模式讀書筆記6——代理模式

代理模式:

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

UML結構以下圖:瀏覽器

代碼實現:安全

   //定義一個Subject 抽象類
    public abstract class Subject
    {
        public abstract void Request();
    }

    //定義一個RealSubject類,繼承Subject
    public class RealSubject : Subject
    {
        public override void Request()
        {
            Console.WriteLine("Called RealSubject.Request()");
        }
    }

    //定義一個代理Prxoy類,繼承Subject
    public class Proxy : Subject
    {
        private 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();
        }
    }

 實例代碼:ide

   public interface IMath
    {
        double Add(double x, double y);
        double Sub(double x, double y);
        double Mul(double x, double y);
        double Div(double x, double y);
    }

    public class Math : IMath
    {
        public double Add(double x, double y) { return x + y; }
        public double Sub(double x, double y) { return x - y; }
        public double Mul(double x, double y) { return x * y; }
        public double Div(double x, double y) { return x / y; }
    }

    public class MathProxy : IMath
    {
        private Math _math = new Math();

        public double Add(double x, double y)
        {
            return _math.Add(x, y);
        }
        public double Sub(double x, double y)
        {
            return _math.Sub(x, y);
        }
        public double Mul(double x, double y)
        {
            return _math.Mul(x, y);
        }
        public double Div(double x, double y)
        {
            return _math.Div(x, y);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //建立一個計算代理
            MathProxy proxy = new MathProxy();
           
            Console.WriteLine("4 + 2 = " + proxy.Add(4, 2));
            Console.WriteLine("4 - 2 = " + proxy.Sub(4, 2));
            Console.WriteLine("4 * 2 = " + proxy.Mul(4, 2));
            Console.WriteLine("4 / 2 = " + proxy.Div(4, 2));
      
            Console.ReadKey();
        }
    }

 運行結果:優化

代理模式應用

一、遠程代理:爲一個位於不一樣的地址空間的對象提供一個局域表明對象。這個不一樣的地址空間能夠是在本機器中,也但是在另外一臺機器中。如 WebService,WCF 在.net 中的調用。spa

二、虛擬代理:根據須要建立一個資源消耗較大的對象,使得此對象只在須要時纔會被真正建立。如瀏覽一個複雜html頁面,有不少圖片和文字,但仍是能夠很快打開,能夠看到全部的文字,此時看到的圖片倒是一張一張下載後才能看到,瀏覽器就是利用代理模式來優化下載的。.net

三、安全代理:用來控制真實對象訪問時的權限,通常用於對象應該有不一樣的訪問權限。代理

四、智能指引:是指當調用真實的對象時,代理處理另一些事。好比將對此對象調用的次數記錄下來。code

相關文章
相關標籤/搜索