大话设计模式读书笔记6——代理模式

代理模式:

代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。

UML结构如下图:

大话设计模式读书笔记6——代理模式

代码实现:

   //定义一个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();

        }

    }

 实例代码:

   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();

        }

    }

 运行结果:

大话设计模式读书笔记6——代理模式

代理模式应用

1、远程代理:为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中,也可是在另一台机器中。如 WebService,WCF 在.net 中的调用。

2、虚拟代理:根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建。如浏览一个复杂html页面,有很多图片和文字,但还是可以很快打开,可以看到所有的文字,此时看到的图片却是一张一张下载后才能看到,浏览器就是利用代理模式来优化下载的。

3、安全代理:用来控制真实对象访问时的权限,一般用于对象应该有不同的访问权限。

4、智能指引:是指当调用真实的对象时,代理处理另外一些事。比如将对此对象调用的次数记录下来。

你可能感兴趣的:(设计模式)