【大话设计模式】——代理模式
一、概念
现实生活中,我们每个人的能力是有限的,总有一些事情让我们束手无策,我们就可以找别人来帮忙,帮我们的这个人称之为代理。下面让我们看一下代理模式的概念:
代理模式(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. 智能指引,指当调用真实对象时,代理处理另外一些事。
本质:通过使用引用对象来访问真实对象,在这里代理对象充当用于客户端和真实对象的中介者。
个人理解:根据爱因斯坦的相对性,凡事有利必有弊,做事要有度。代理模式运用的好就可以节省内存,保障了用户安全,方便调度。运用的不好,就成了九曲十八弯,费力不讨好。不过相信一点,存在必合理,虽然现在我们只能对它有一个初步的了解,不怕不知道,就怕不知道,总有一天会有它的用武之地!
【大话设计模式】——代理模式相关推荐
- 大话设计模式-代理模式(大鸟和小菜Java版)
代理模式:在代理模式(Proxy Pattern)中,一个类代表另一个类的功能.这种类型的设计模式属于结构型模式. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 以上就是代理模式 ...
- 大话设计模式—代理模式
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能.这种类型的设计模式属于结构型模式.我们创建具有现有对象的对象,以便向外界提供功能接口. 大话设计模式中程杰老师的给出的解释是代理模 ...
- linkin大话设计模式--代理模式
代理模式是一种应用非常广泛的设计模式,当客户端代码需要调用某个对象的时候,客户端并不关心是否可以准确的得到这个对象,他只要一个能够提供该功能的对象而已,此时我们就可以返回该对象的代理.总而言之,客户端 ...
- 大话设计模式-代理模式
代理模式 Spring AOP就是使用的动态代理 概念:在代理模式(Proxy Pattern)中,一个类代表另一个类的功能,创建具有现有对象的对象,以便向外界提供功能接口 意图:为其他对象提供一种代 ...
- linkin大话设计模式--常用模式总结
linkin大话设计模式--常用模式总结 一,常用设计模式定义 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. Adapter( ...
- Python设计模式-代理模式
Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...
- Java设计模式(代理模式-模板方法模式-命令模式)
Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...
- 设计模式——代理模式
设计模式--代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能 ...
- 23种设计模式----------代理模式(一)
代理模式也叫委托模式. 代理模式定义:对其他对象提供一种代理从而控制对这个对象的访问.就是,代理类 代理 被代理类,来执行被代理类里的方法. 一般情况下,代理模式化有三个角色. 1,抽象的主题类(或者 ...
- java设计模式代理模式_Java中的代理设计模式
java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...
最新文章
- 舵机任意角度程序_真香!!!飞特发布性价比超高的19kg磁编码360°双轴串口总线舵机STS3215...
- 在linux下给grep命令添加颜色
- SmartImageView框架的使用
- systemverilog硬件设计及建模_Chisel引领敏捷硬件开发浪潮
- React 新特性 Hooks 讲解及实例(四)
- CSS如何实现”右部宽度固定,左部自适应“的布局
- python编程基础之二十九
- C#编码简单性之泛型篇(如何编写简短的C#代码,随时更新)
- 几个清华和交大学霸的公众号,值得学习
- 基于html5的消除类游戏,基于HTML5的消除类游戏1.doc
- 使用PageOffice---如何在模板中添加数据区域
- 埃斯顿工业机器人控制柜_埃斯顿estun伺服电机动力线MS3108B22-22S BDM-GA14
- 电力电子技术笔记(3)——晶闸管
- 河南省公安机关户政服务管理工作规范(试行)
- 学习《医学三字经白话解》之气喘
- 加域电脑,如何脱域上网下载安装其他工具软件
- 4244. 【五校联考6day2】yi
- Java开发工程师应届生春招秋招总结
- ppt教学课件制作的原则、规律和授课技巧
- 微信小程序也许会用到上传视频,针对视频转码转为m3U8格式即web端可以使用的解决办法