网站兼容性,淘宝佣金推广网站建设,网站一般字体,品牌vi设计模板代理模式#xff1a;中间者的故事 介绍需求分析代理模式代码实现代理模式整理和用途第一种用途第二种用途第三种用途第四种用途 总结 介绍
本文引用《大话设计模式》第七章节的内容进行学习分析#xff0c;仅供学习使用
需求#xff1a;小明拜托自己好朋友小王给他朋友小美… 代理模式中间者的故事 介绍需求分析代理模式代码实现代理模式整理和用途第一种用途第二种用途第三种用途第四种用途 总结 介绍
本文引用《大话设计模式》第七章节的内容进行学习分析仅供学习使用
需求小明拜托自己好朋友小王给他朋友小美送礼物。
需求分析
首先我们要知道这里我上文的需求小明和小美是互相不认识的这里的小王却是两人的好朋友所以这里就产生了小王这个中间人帮助小明给小美送花那么我们在程序设计的时候其实小明和小美是不能直接建立关联的。
既然我分析中已经出来中间者了估计有很多人想到的设计模式是观察者设计模式和代理模式因为我上面阐述的对于非代理来说只是一对一的关系但是观察者设计模式不仅有一对一而且更是一对多所以这里我们用代理模式介绍一下。
代理模式
先把UML图放在这里
这一篇代理模式来讲还是比较好理解的。实际上我们就可以把RealSubject这个类当作小明我们把Proxy这个代理就当作小王然而这个Subject就是一个抽象类去帮助小明和小王去实现共同方法送礼物图中是没有小美的但是我们可以在Proxy这个代理中去创建一个小美的类这样就完成了我上述说的通过小王小明把礼物送给了小美这就是一个代理模式。
代码实现
抽象类
using System;namespace Proxy{public abstract class SubjectNew{public abstract void SendObj(Present present);}}小明实体类
using System;namespace Proxy{public class XiaoMing : SubjectNew{public override void SendObj(Present present){Console.WriteLine(送 present.ToString());}}}
代理类
using System;namespace Proxy{public class ProxyNew : SubjectNew{XiaoMing m_xiaoming;public override void SendObj(Present present){if (m_xiaoming null){m_xiaoming new XiaoMing();}m_xiaoming.SendObj(present);}}}礼物枚举类
using System;namespace Proxy{public enum Present{Flower,Milk,ToyBaby}}最后看一下调用方式
ProxyNew proxyNew new ProxyNew();
proxyNew.SendObj(Present.Flower);
proxyNew.SendObj(Present.Milk);
proxyNew.SendObj(Present.ToyBaby);这个就是上述的实现方式
代理模式整理和用途
这里我把上述代理模式的UML图源码放在下面
Subject抽象类
using System;namespace Proxy{public abstract class Subject{public abstract void Request();}}RealSubject实体类
using System;namespace Proxy{public class RealSubject : Subject{public override void Request(){Console.WriteLine(这里是真实的请求);}}}Proxy代理类
using System;namespace Proxy{public class Proxy : Subject{RealSubject realSubject;public override void Request(){if (realSubject null) realSubject new RealSubject();realSubject.Request();}}}第一种用途
远程代理也就是为一个对象在不同地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。也就是说当我们应用程序中引入一个Web引用此时引用WebService是会生成一个WebReference的文件夹和一些文件其实他就是代理这就是的客户端要想远程连接的时候直接调用代理WebReference即可。
第二种用途
虚拟代理是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。比如说我们打开一个很大的HTML网页为什么很快就能加载仔细看一下实际上文字并不大主要是图片比较大然而人家也不傻这里如果把大图放在主网页上岂不是需要加载很长时间这时候就没一张缩略图其实就是一个代理他存放了原始图片的大小和地址当你点击的时候去实例化真实的对象。
第三种用途
安全代理用来控制真实对象访问时的权限。
第四种用途
智能指引是指在调用真实对象时代理处理另外一些事指责分开。
总结
个人认为代理模式还是在编程中比较常用的模式希望本文章能够对读者有帮助。每天进步一点点。