码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-06-06 12:12:32      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:


背景

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

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决定的,而代理只是决定不服环境因素;装饰模式侧重的是事情的过程,每个过程都是平等的,换句话说每个装饰对象都是对等的。


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

标签:

原文地址:http://my.oschina.net/heweipo/blog/425614

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!