设计模式你怎么看?--代理模式
2014-04-21 08:29
232 查看
一 前言
最近持续在地地铁上看设计模式,突然之间就想通了,所有的模式最终都是想将代码解耦,提高重用,封装变化,总结起来就是"面向对象" 而在代码中要面向对象就离不开 抽象类 接口 继承。这么一想之后 发现所有的设计模式不管怎么变也只是抽象类 接口 继承。当我想通这点后再去看各种设计模式时 我就只需要关注于除了以上三点的变化之处了,理解也更简单了,下面开始学习一个新的模式 ——代理模式设计模式你怎么看?--简单工厂模式
设计模式你怎么看?--抽象工厂模式
设计模式你怎么看?--工厂方法模式
设计模式你怎么看?--策略模式
二 代理模式简介
2.1 什么是代理模式为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
在实际生活中的表现就是各种中介,比如租房 你通过中介这个代理来找房东租房,这就像是代理模式
2.2 代理模式包含角色
Subject:定义 了RealSubject和Proxy的共用接口,使得任何 使用RealSubject的地方都可以使用Proxy
RealSubject:定义Proxy所代表的真实实体。
Proxy:保存一个引用 使得代理可以访问实体并提供一个与Subject的接口相同的接口,使得代理 以用来替代实体
2.3 代理模式UML图
![](http://images.cnitblog.com/i/366784/201404/190956267132154.png)
三 代理模式代码
定义公共方法抽象类/// <summary> /// 定义 Proxy与RealRequest类的公共方法 /// </summary> public abstract class Request { public abstract void SendMessage(); }
代理类 继承并实现Request基类中方法
/// <summary> /// 代理类 /// </summary> class Proxy : Request { private RealRequest realRequest; public override void SendMessage() { if (realRequest == null) realRequest = new RealRequest(); realRequest.SendMessage(); } }
RealRequest类 真正执行客户所请求的方法
/// <summary> /// 实际执处理请类 /// </summary> class RealRequest:Request { public override void SendMessage() { Console.WriteLine("通过代理发送成功!"); } }
客户端类 发起请求
/// <summary> /// 客户端类 将请求发给代理类(Proxy) /// </summary> class Program { static void Main(string[] args) { Proxy proxy = new Proxy(); proxy.SendMessage(); Console.Read(); } }
执行结果如下
![](http://images.cnitblog.com/i/366784/201404/191229249781941.png)
四 总结
路得一步一步走,代码得一行一行敲。本人水平有限,如有不对之处还请指出 谢谢~
如果您觉得本文有给您带来一点收获,不妨点个推荐,为我的付出支持一下,谢谢~
如果希望在技术的道路上能有更多的朋友,那就关注下我吧,让我们一起在技术的路上奔跑
相关文章推荐
- python for 语句
- iOS真机调试证书申请流程
- Struts2数据传输的背后机制:ValueStack(值栈)(转载)
- EF学习链接
- c++翻转链表
- 驱动函数笔记
- vitualbox 虚拟机ubuntu安装增强功能
- ASP.NET三层架构网站之创建
- Visual Studio 常用快捷键
- 动态规划之最长公共子序列
- vs插件
- C语言的整型溢出问题
- 菜根谭#106
- 3G卡上网 数据连接 成功就是不能上网 消息框没有数据链接符号
- 又是一天过去了
- 血压或下肢水肿用药参考
- 什么是HTTP协议?—深入理解HTTP协议
- 数字图像-频域处理
- C#的as, is和类型强制转换
- 如何在快速启动栏创建快捷方式