您的位置:首页 > 其它

设计模式系列十三 代理模式介绍

2015-01-23 00:00 447 查看
摘要: 代理模式介绍

一、定义代理模式

代理模式 为另一个对象提供一个替身或占位符以控制对这个对象的访问。类图:图01.jpg



首先是Subject,它为RealSubject和Proxy提供了接口。通过实现同一接口,Proxy在RealSubject出现的地方取代它。

RealSubject是真正做事的对象,它是被Proxy代理和控制访问的对象。

Proxy持有RealSubject的引用。在某些例子中,Proxy还会负责RealSubject对象的创建与销毁。客户和RealSubject的交互都必须通过Proxy。因为Proxy和RealSubject实现相同的接口(Subject),所以任何用到RealSubject的地方,都可以用Proxy取代。Proxy也控制了对RealSubject的访问,在某些情况下,我们需要这样的控制。这些情况包括RealSubject是远程的对象、RealSubject创建开销大,或RealSubject需要被保护。

有时,我们将代理描述成另一个对象的“代表”。使用代理模式创建代表(representative)对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。

但是代理控制访问怎么解释呢?这听起来有一点奇怪。代理之所以需要控制访问,是因为我们的客户(监视器)不知道如何和远程对象沟通。几种代理控制访问的方式:

1、远程代理控制访问远程对象。

2、虚拟代理控制访问创建开销大的资源。

3、保护代理基于权限控制对资源的访问。

二、代理的简单介绍

1、远程代理可以作为另一个JVM上对象的本地代表。调用代理的方法,会被代理利用网络转发到远程执行,并将结果通过网络返回给代理,再由代理将结果转给客户。图02.jpg



2、虚拟代理作为创建开销大的对象的代表。虚拟代理经常直到我们真正需要一个对象的时候才创建它,当对象在创建前和创建中时,由虚拟代理来扮演对象的替身。对象创建后,代理就会将请求直接委托给对象。图03.jpg



三、回顾要点

1、代理模式为另一个对象提供代表,以便控制客户对对象的访问,管理访问的方式有许多中。

2、远程代理管理客户和远程对象之间的交互。

3、虚拟代理控制访问实例化开销大的对象。

4、保护代理基于调用者控制对对象方法的访问。

5、代理模式有许多变体,例如:缓存代理、同步代理、防火墙代理和写入时复制代理。

6、代理在结构上类似装饰者,但是目的不同。

7、装饰者模式为对象加上行为,而代理则是控制访问。

8、Java内置的代理支持,可以根据需要建立动态代理,并将所有调用分配到所选的处理器。

9、就和其他的包装者(wrapper)一样,代理会造成你的设计中类的数目增加。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  代理模式