Design Pattern: Proxy 模式(一)
2011-01-06 15:56
127 查看
http://www.35java.com/zhibo/forum.php?mod=viewthread&tid=277&extra=page%3D2
在 Gof 的书中对Proxy模式的目的给定为:为其它的物件提供一种代理,以控制对这个物件的访问。由这句话所延伸出来的意思是,根据您的目的不同,您的代理物件将负有不同的责任,因为产生多种不同的代理情况。
根据不同的代理目的,而有不同的代理情况,在Gof中所举的一个例子是VirtualProxy,当中举一个文档中内嵌图片的例子,假设您的图片是在文档分页的后面,一开始您并不用直接载入图片,而使用一个虚代理物件,代替图片被载入,以求开启一个文档的时候,速度能够加快。当您卷动文档至该显示图片的页数时,这时再载入图片。
如上图所示,当文档被开启时,ImageProxy物件代理Image物件被载入,在还没卷动至图片显示处时,也就是还没有调用ImageProxy的draw()时,图片并不会被载入,因而可以加速文档的开启与节省记忆体的使用;如果需要显示图片了,ImageProxy的draw()会被调用,而这时才真正创建Image物件,以从硬碟中载入图片。
Proxy模式的 UML 结构图如下所示:
在调用RealSubject的request()之前,Proxy物件也许会有一些预先处理的操作,就假设我们组织为preOperation()与 postOperation()好了,当客户对Proxy发出request()请求后,一个可能的时序图如下所示:
您的preOperation()与postOperation()正决定了Proxy模式使用于何种情况,例如一个RemoteProxy的情况,可以为一个远端真实物件提供一个局部代表;ProtectionProxy控制对物件的访问,您可以使用它来作不同级别、权限的存取控制;CacheProxy为一个物件提供临时的储存,使得许多客户端都能直接存取它,而不用对真实物件直接要求,只有在必要的时候更新这个临时物件,或是让客户直接存取真实物件。
在 Gof 的书中对Proxy模式的目的给定为:为其它的物件提供一种代理,以控制对这个物件的访问。由这句话所延伸出来的意思是,根据您的目的不同,您的代理物件将负有不同的责任,因为产生多种不同的代理情况。
根据不同的代理目的,而有不同的代理情况,在Gof中所举的一个例子是VirtualProxy,当中举一个文档中内嵌图片的例子,假设您的图片是在文档分页的后面,一开始您并不用直接载入图片,而使用一个虚代理物件,代替图片被载入,以求开启一个文档的时候,速度能够加快。当您卷动文档至该显示图片的页数时,这时再载入图片。
如上图所示,当文档被开启时,ImageProxy物件代理Image物件被载入,在还没卷动至图片显示处时,也就是还没有调用ImageProxy的draw()时,图片并不会被载入,因而可以加速文档的开启与节省记忆体的使用;如果需要显示图片了,ImageProxy的draw()会被调用,而这时才真正创建Image物件,以从硬碟中载入图片。
Proxy模式的 UML 结构图如下所示:
在调用RealSubject的request()之前,Proxy物件也许会有一些预先处理的操作,就假设我们组织为preOperation()与 postOperation()好了,当客户对Proxy发出request()请求后,一个可能的时序图如下所示:
您的preOperation()与postOperation()正决定了Proxy模式使用于何种情况,例如一个RemoteProxy的情况,可以为一个远端真实物件提供一个局部代表;ProtectionProxy控制对物件的访问,您可以使用它来作不同级别、权限的存取控制;CacheProxy为一个物件提供临时的储存,使得许多客户端都能直接存取它,而不用对真实物件直接要求,只有在必要的时候更新这个临时物件,或是让客户直接存取真实物件。
相关文章推荐
- 设计模式笔记 – Proxy 代理模式 (Design Pattern)
- Design Pattern: Proxy 模式
- Design Pattern: Proxy 模式(二)
- Head First 设计模式 Design Pattern 11-13 Proxy, Combining, For Real
- Design Pattern—— Dynamic Proxy Pattern 动态代理模式
- Design Pattern—— Dynamic Proxy Pattern(三) 动态代理模式
- Design Pattern—— static proxy pattern 静态代理模式
- Design Pattern—— Dynamic Proxy Pattern(二) 动态代理模式
- Design Pattern_Proxy(代理模式)
- 设计模式--Proxy
- (转)代理模式(Proxy)
- Proxy代理模式
- 设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 抽象工厂模式(Abstract Factory) - Java实现
- 主键批处理器模式及序列化实体模式(J2EE design pattern摘记及感想6)
- 结构型-代理模式(proxy)
- 读《大话设计模式》---代理模式(proxy)
- C#设计模式扩展——Meditor+Proxy模式实现
- Proxy模式:管理第三方API
- python: 设计模式(design pattern)之修饰器模式(decorator)
- 单点登录cas常见问题(八) - 什么时候会用到代理proxy模式?