大话设计模式读书笔记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

相关文章
相关标签/搜索