博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大话设计模式读书笔记6——代理模式
阅读量:6329 次
发布时间:2019-06-22

本文共 2657 字,大约阅读时间需要 8 分钟。

代理模式:

代理模式(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、智能指引:是指当调用真实的对象时,代理处理另外一些事。比如将对此对象调用的次数记录下来。

转载于:https://www.cnblogs.com/lxblog/p/4112595.html

你可能感兴趣的文章
Dubbo和Zookeeper
查看>>
前端项目课程3 jquery1.8.3到1.11.1有了哪些新改变
查看>>
UOJ#179. 线性规划(线性规划)
查看>>
整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
查看>>
Isolation Forest原理总结
查看>>
windows的服务中的登录身份本地系统账户、本地服务账户和网络服务账户修改
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
redis 安装
查看>>
C# tips ---值类型的装箱和拆箱
查看>>
SQL some any all
查看>>
电子书下载:Programming Windows Identity Foundation
查看>>
有理想的程序员必须知道的15件事
查看>>
用于测试的字符串
查看>>
财付通和支付宝资料收集
查看>>
PHPCMS V9数据库表结构分析
查看>>
『原创』+『参考』基于PPC的图像对比程序——使用直方图度量
查看>>
理解 IEnumerable 与 IEnumerator
查看>>
NHibernate 2.0 Beta 1 Released和一些工具
查看>>
【每天一个Linux命令】12. Linux中which命令的用法
查看>>
软件接口数据一致性机制
查看>>