文档章节

小菜学设计模式——代理模式

learn_more
 learn_more
发布于 2015/06/06 10:38
字数 892
阅读 122
收藏 10

背景

    很多时候,因为你的地位特殊而赋予你了不同的权限,那么你拥有别人做不到的事情。这个时候,如果你的朋友很想完成这样一件事情,但是她知道自己可能无法完成,但是你可以帮他处理,同时必要的话还可以中间拿点外快,不过最后要知道你是代理他完成这样一个事情,这就是代理模式出现的原因。

1、使用意图

    通过代理角色代理真实角色去完成某一件特定事情,代理为什么会出现,因为代理身份的特殊性。

2、生活实例

    找房子的时候会找代理,代理能够帮我找到房子,但是他额外收取了我一个月的房租,不说了,房租好贵!

3、Java 例子(框架、JDK 、JEE)

    Spring AOP 面向切面编程就是一个典型的代理模式,通过切入点设置代理,使得Spring自动帮我们完成很多额外的事情,当然,具体如何代理的,肯定使用通过反射完成的!其实个人觉得Spring的核心就是 IOC和AOP,其中IoC使用的核心机制就是反射机制,AOP使用的核心原理就是动态代理设计模式。

    其实Java提供了动态代理的API,具体使用起来也很简单!

4、模式类图

    

5、模式优点

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

    代理模式的应用:

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

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

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

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

6、与类似模式比较

    代理模式可以说是设计模式当中最有价值的模式之一了,感觉只要有项目使用了他,都是高大上!代理本身就是一个很重要的概念,现在很厉害的正向代理和反向代理,听说反向代理可以很好的降低服务端的压力。

    仔细你会发现,代理模式的类图和装饰模式的类图真的很相似,其实个人觉得代理模式算得上是装饰模式的一个特殊了,为什么这么说,因为代理模式中Proxy聚合了RealSubject,而装饰模式则是Decorator聚合了Component,很明显装饰模式显得更加宽广。二者都可以层层包装,层层代理。

    代理模式和装饰模式如果从二者侧重点上来说的话,其实还是有差别的,代理模式侧重的事情结果,这个完成是RealSubject决定的,而代理只是决定不服环境因素;装饰模式侧重的是事情的过程,每个过程都是平等的,换句话说每个装饰对象都是对等的。


© 著作权归作者所有

共有 人打赏支持
learn_more
粉丝 92
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
迈向大牛的重要一步——掌握设计模式

IT职场的小菜经常有这样的疑问: 为什么一个相似的功能,大牛一会儿就搞定,然后悠闲地品着下午茶逛淘宝;而自己加班加点搞到天亮还做不完。 为什么用户提出需求变更后,大牛只需潇洒地敲敲键...

一枚Sir
2015/04/10
0
0
《JavaScript设计模式与开发实践》原则篇(2)—— 最少知识原则

最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这 里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。 单一职责原则指导我们...

嗨呀豆豆呢
2018/12/30
0
0
设计模式已经陨落了?

你现在是坐在一个程序员旁边吗?如果是的话,那么在你读下面的段落之前,有一个简单的实验。让他们到一边去,问问他们两个问题并记录下答案。首先问他们“什么是设计模式?”然后再问“说出你...

oschina
2014/03/11
9.1K
69
《JavaScript设计模式与开发实践》最全知识点汇总大全

系列文章: 《JavaScript设计模式与开发实践》基础篇(1)—— this、call 和 apply 《JavaScript设计模式与开发实践》基础篇(2)—— 闭包和高阶函数 《JavaScript设计模式与开发实践》模式...

嗨呀豆豆呢
01/04
0
0
编程中的那些套路——关于策略模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 今天讲讲策略模式,策略模式 和工厂模式十分相像(或者说在代码逻辑层面,他们是一样的)。 但策略模式与...

gzchen
2018/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
9
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
6
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
4
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0
RabbitMQ学习(2)

1. 生产者客户端 void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) 1. 在生产者客户端发送消息时,首先......

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部