设计模式系列十三 代理模式介绍
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)一样,代理会造成你的设计中类的数目增加。
一、定义代理模式
代理模式 为另一个对象提供一个替身或占位符以控制对这个对象的访问。类图:图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)一样,代理会造成你的设计中类的数目增加。
相关文章推荐
- 设计模式初学者系列之代理模式
- 设计模式十三:proxy(代理)——对象结构型模式
- JAVA系列-设计模式-代理模式
- 设计模式总结篇系列:代理模式(Proxy)
- C#设计模式系列:代理模式(Proxy)
- 设计模式系列漫谈之十三 - 访问者模式
- 深入理解JavaScript系列(31):设计模式之代理模式
- iOS开发篇——OC 协议和代理设计模式介绍
- 设计模式学习系列十三:状态模式(State)
- 深入理解JavaScript系列(31):设计模式之代理模式
- 设计模式系列-代理模式
- 设计模式系列-代理模式
- 设计模式系列-代理模式
- 研磨设计模式 之 代理模式(Proxy)1——跟着cc学设计系列
- 设计模式(十三)——代理模式(Proxy)
- 本文详细介绍Python 设计模式系列之二: 创建型 Simple Factory 模式(转载)
- 极速理解设计模式系列:3.代理模式(Proxy Pattern)
- 深入理解JavaScript系列(31):设计模式之代理模式
- 深入理解JavaScript系列(31):设计模式之代理模式
- 设计模式系列之代理