首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

【设计方式】学习笔记17:代理模式之保护代理与Java反射

2013-10-08 
【设计模式】学习笔记17:代理模式之保护代理与Java反射本文出自http://blog.csdn.net/shuangde800本笔记内容

【设计模式】学习笔记17:代理模式之保护代理与Java反射



本文出自   http://blog.csdn.net/shuangde800



本笔记内容:

1. Java动态代理,反射机制

2. 保护代理

3. 应用保护代理实现的约会系统

----------------------------------------



走进保护模式


我们知道,相亲节目已经在天朝的电视上已经火了多年了,说明了有广大同胞需要这个配对服务,更别说咱们程序猿这个群体了。

现在要实现一个约会服务系统。你希望在这个服务系统中,增加一个评分功能,类似于豆瓣上的评分系统。

浏览一个人资料后,可以给对方进行评分。

你希望这套系统能帮助顾客找到一个理想的对象,这也会让事情更有趣。



很快,你应该就能想到服务系统需要一个PersonBean的接口,来设置或取得一个人的信息: 



Invocation的工作原理是响应代理的任何调用,可以看成是代理收到方法调用后,请求做实际工作的对象。

我们要用Java的动态代理创建这个约会系统的保护代理。

下面来看怎样用Java动态代理实现保护模式。


实现保护代理的约会系统

顾客不可以改变自己的HotOrNot评分,也不可以改变其他顾客的个人信息。为了达到这个目标,必须要创建两个代理:一个用来访问你自己的PersonBean对象,另一个用来访问另一个顾客的PersonBean对象。这样,代理就可以控制在每一种情况下允许哪一种请求了。


创建这个代理,就必须使用Java API的动态代理。Java会为我们创建两个代理,而我们只需要提供handler来处理代理转来的方法。


步骤一:创建两个InvocationHandler

InvocationHandler实现了代理的行为,Java负责创建真实代理类和对象。我们只需要提供在方法调用发生时知道做什么的handler。我们需要写两个InvocationHandler(调用处理器),其中一个给拥有者使用,另一个给非拥有者使用。究竟什么是InvocationHandler呢?可以这样想:当代理方法被调用时,代理就会把这个调用转发给InvocationHandler,但是这并不是通过调用InvocationHandler的对应方法做到的。


给拥有者使用的InvocationHandler:




小结:

动态代理之所以称为动态代理,是因为运行时才将它的类创建出来。代码开始时,还没有proxy类, 它是根据需要从你传入的接口集创建的。

InvocationHandler不是一个proxy,它只是一个帮助proxy的类,proxy会把调用转发给它处理.Proxy本身是利用静态的Proxy.newProxyInstance()方法在运行时动态创建的。



代理模式一共记了三篇的笔记:远程代理,虚拟代理,和保护代理。代理模式的还远远不止这些:


防火墙代理(Firewall Proxy)

控制网络资源的访问,保护主题免于“坏客户”的侵害。常用在公司的防火墙系统


智能引用代理(Smart Reference Proxy):

当主题被引用时,进行额外的动作,例如计算一个对象被引用的次数。


缓存代理(Caching Proxy):

为开销大的运算结果提供暂时存储:它也可以允许多个客户共享结果,以减少计算或网络延迟。常用在Web服务器代理,以及内容管理与出版系统。


同步代理(Synchronizationi Proxy): 

在多线程的情况下为主题提供安全的访问。常用在JavaSpaces,为分散式环境内的潜在对象集合提供同步访问控制。


复杂隐藏代理(Complexity Hiding Proxy):

用来隐藏一个类的复杂集合的复杂度,并进行访问控制。有时候也称为外观代理(Facade Proxy),这不难了解。复杂隐藏代理和外观模式是不一样的,因为代理控制访问,而外观模式只提供另一组接口.


写入时复制代理(Copy-On-Write Proxy):

用来控制对象的复制,方法是延迟对象的复制,知道客户真的需要为止。这是虚拟代理的变体。





热点排行