文档章节

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

learn_more
 learn_more
发布于 2015/06/06 10:38
字数 892
阅读 120
收藏 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
编程中的那些套路——关于策略模式

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

gzchen
08/27
0
0
编程中的那些套路——关于工厂模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 前面我们写了简单工厂模式,《编程中的那些套路——关于简单工厂模式》,但简单工厂模式有一些不足(违反...

gzchen
08/27
0
0
编程中的那些套路——关于单例模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 在设计模式中,单例模式和工厂模式)可以说是使用的最普遍的设计模式了,所以掌握此种模式尤为重要。 单...

gzchen
08/27
0
0
编程中的那些经典套路——设计模式汇总

在正式阅读前,我先谈谈我们该用什么姿势和心态学习设计模式: 如果你还没有过多的编程经验(泛指半年以下),我建议你把它当做小说来看,能看懂多少是多少,因为半年以下经验的程序员用到设...

gzchen
08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

五大云原生技术

云原生(Cloud-Native)是一种文化,更是一种潮流,它是云计算的一个必然导向,是让云成为云化战略成功的基石。云计算时代,云原生技术注定将对现代化应用的建设、交付与运维产生颠覆性的影响...

问题终结者
4分钟前
0
0
Android JNI开发系列(十二) JNI局部引用、全局引用和弱全局引用

JNI 局部引用、全局引用和弱全局引用 在JNI规范中定义了三种引用:局部引用(Local Reference)、全局引用(Global Reference)、弱全局引用(Weak Global Reference)。区别如下: 局部引用...

蔡小鹏
5分钟前
0
0
Android 实现类似考试座号表效果

类似于这种效果 1,新建一个Student类,用户添加学生信息 private int icon; private String name; private int age; private String sex ; private int id; publ...

lanyu96
11分钟前
0
0
聊聊storm的CustomStreamGrouping

序 本文主要研究一下storm的CustomStreamGrouping CustomStreamGrouping storm-2.0.0/storm-client/src/jvm/org/apache/storm/grouping/CustomStreamGrouping.java public interface CustomS......

go4it
20分钟前
1
0
编程中的各种闲谈

service 是否一定要定义 interface 在学习ssh(spring, struts2, hibernate)时,老师教在 service 层要定义接口,再去实现此接口,方便解耦。 在 spring 框架中,自身定义了很多接口,并且有不...

seal_90
21分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部