一、概念

  现实生活中,我们每个人的能力是有限的,总有一些事情让我们束手无策,我们就可以找别人来帮忙,帮我们的这个人称之为代理。下面让我们看一下代理模式的概念:

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

二、UML图

Subject(抽象角色):定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy.

RealSubject(真实角色):定义了Proxy所代表的真实实体。

Proxy(代理角色):保存了一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来代替实体。

RealSubject和Proxy都继承了Subject抽象类的方法,Proxy和RealSubject的关系是关联关系。体现在代码上,RealSubject类中书写具体的方法,Proxy去调用RealSubject中的方法。Proxy和RealSubject共同实现Subject的接口。

三、实例解析

  有的时候,一些突发事件蹦出来想要打乱了我们的计划,却又正好赶上我们有更加重要的事情要亲自去做,那这件紧急不重要的事情怎么办呢?如果可以的话,让别人代替我们完成。

  这就要用到我们的代理了,XX去帮我打个水吧,XX去帮我取个快递吧~

下面是应用了代理模式的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication11
{class Program{static void Main(string[] args){Proxy p=new Proxy ();p.BringWater();p.BringPackage();Console .Read ();}}//定义了Roommates和Proxy的公用接口abstract class Working{public abstract void BringWater();public abstract void BringPackage();}//让代理去实现干活的接口,定义了Proxy所代表的真实实体。class Roommates : Working {public override void BringWater(){Console.WriteLine("兄弟,帮我打水吧!");}public override void BringPackage(){Console.WriteLine("兄弟,帮我取快递吧!");}}//保持一个引用使得代理可以访问实体,并提供一个与Working的接口相同的接口,这样代理就可以用来替代实体。class Proxy:Working {Roommates r;public override void BringWater(){if (r == null){r = new Roommates();}r.BringWater();           }public override void BringPackage(){if (r == null){r = new Roommates();}r.BringPackage();}}
}

运行结果:

四、总结

代理模式应用:

1.  远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

2.  虚拟代理,根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。

3.  安全代理,用来控制真实对象访问的权限。

4.  智能指引,指当调用真实对象时,代理处理另外一些事。

 本质:通过使用引用对象来访问真实对象,在这里代理对象充当用于客户端和真实对象的中介者。

个人理解:根据爱因斯坦的相对性,凡事有利必有弊,做事要有度。代理模式运用的好就可以节省内存,保障了用户安全,方便调度。运用的不好,就成了九曲十八弯,费力不讨好。不过相信一点,存在必合理,虽然现在我们只能对它有一个初步的了解,不怕不知道,就怕不知道,总有一天会有它的用武之地!

【大话设计模式】——代理模式相关推荐

  1. 大话设计模式-代理模式(大鸟和小菜Java版)

    代理模式:在代理模式(Proxy Pattern)中,一个类代表另一个类的功能.这种类型的设计模式属于结构型模式. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 以上就是代理模式 ...

  2. 大话设计模式—代理模式

    在代理模式(Proxy Pattern)中,一个类代表另一个类的功能.这种类型的设计模式属于结构型模式.我们创建具有现有对象的对象,以便向外界提供功能接口. 大话设计模式中程杰老师的给出的解释是代理模 ...

  3. linkin大话设计模式--代理模式

    代理模式是一种应用非常广泛的设计模式,当客户端代码需要调用某个对象的时候,客户端并不关心是否可以准确的得到这个对象,他只要一个能够提供该功能的对象而已,此时我们就可以返回该对象的代理.总而言之,客户端 ...

  4. 大话设计模式-代理模式

    代理模式 Spring AOP就是使用的动态代理 概念:在代理模式(Proxy Pattern)中,一个类代表另一个类的功能,创建具有现有对象的对象,以便向外界提供功能接口 意图:为其他对象提供一种代 ...

  5. linkin大话设计模式--常用模式总结

    linkin大话设计模式--常用模式总结 一,常用设计模式定义 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. Adapter( ...

  6. Python设计模式-代理模式

    Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...

  7. Java设计模式(代理模式-模板方法模式-命令模式)

    Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...

  8. 设计模式——代理模式

    设计模式--代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能 ...

  9. 23种设计模式----------代理模式(一)

    代理模式也叫委托模式. 代理模式定义:对其他对象提供一种代理从而控制对这个对象的访问.就是,代理类 代理 被代理类,来执行被代理类里的方法. 一般情况下,代理模式化有三个角色. 1,抽象的主题类(或者 ...

  10. java设计模式代理模式_Java中的代理设计模式

    java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...

最新文章

  1. 舵机任意角度程序_真香!!!飞特发布性价比超高的19kg磁编码360°双轴串口总线舵机STS3215...
  2. 在linux下给grep命令添加颜色
  3. SmartImageView框架的使用
  4. systemverilog硬件设计及建模_Chisel引领敏捷硬件开发浪潮
  5. React 新特性 Hooks 讲解及实例(四)
  6. CSS如何实现”右部宽度固定,左部自适应“的布局
  7. python编程基础之二十九
  8. C#编码简单性之泛型篇(如何编写简短的C#代码,随时更新)
  9. 几个清华和交大学霸的公众号,值得学习
  10. 基于html5的消除类游戏,基于HTML5的消除类游戏1.doc
  11. 使用PageOffice---如何在模板中添加数据区域
  12. 埃斯顿工业机器人控制柜_埃斯顿estun伺服电机动力线MS3108B22-22S BDM-GA14
  13. 电力电子技术笔记(3)——晶闸管
  14. 河南省公安机关户政服务管理工作规范(试行)
  15. 学习《医学三字经白话解》之气喘
  16. 加域电脑,如何脱域上网下载安装其他工具软件
  17. 4244. 【五校联考6day2】yi
  18. Java开发工程师应届生春招秋招总结
  19. ppt教学课件制作的原则、规律和授课技巧
  20. 微信小程序也许会用到上传视频,针对视频转码转为m3U8格式即web端可以使用的解决办法

热门文章

  1. UITextField输入字符限制,中英文混排
  2. A股 港股 美股策略回测 RSI KDJ EMA 美股行情 美股数据 通达信转python
  3. 如何使用手机快速完成证件照制作?
  4. 只要三步,带你用Python换脸
  5. 服务器系统c盘给多大,服务器主机c盘要多大
  6. C盘满了怎么分析C盘使用情况 找出C盘大文件
  7. LR8.0、8.1、9.0下载和破解方法
  8. HGANMDA:用于miRNA与疾病关联预测的分层图注意力网络(Molecular Therapy)
  9. JS面试题汇总(三)
  10. 花生日记基础架构建设