zoukankan      html  css  js  c++  java
  • 大话设计模式读书笔记6——代理模式

    代理模式:

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

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

     实例代码:

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

     运行结果:

    代理模式应用

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

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

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

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

  • 相关阅读:
    php如何导出csv文件(代码示例)
    【转】Linux 进程终止后自动重启
    【转】小程序web-view覆盖原生组件
    搭建 LNMP 环境
    数据库索引的底层原理
    NoSQL 介绍
    MySQL Explain详解
    centos搭建 SVN 服务器
    【转】提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
    优化mysql slave的同步速度
  • 原文地址:https://www.cnblogs.com/lxblog/p/4112595.html
Copyright © 2011-2022 走看看