Design Pattern: Proxy 模式(一)
 

2009-09-17 来源:riabook.cn

 

在 Gof 的书中对Proxy模式的目的给定为:为其它的物件提供一种代理,以控制对这个物件的访问。由这句话所延伸出来的意思是,根据您的目的不同,您的代理物件将负有不同的责任,因为产生多种不同的代理情况。

根据不同的代理目的,而有不同的代理情况,在Gof中所举的一个例子是Virtual Proxy,当中举一个文档中内嵌图片的例子,假设您的图片是在文档分页的后面,一开始您并不用直接载入图片,而使用一个虚代理物件,代替图片被载入,以求开启一个文档的时候,速度能够加快。当您卷动文档至该显示图片的页数时,这时再载入图片。

Proxy

如上图所示,当文档被开启时,ImageProxy物件代理Image物件被载入,在还没卷动至图片显示处时,也就是还没有调用 ImageProxy的draw()时,图片并不会被载入,因而可以加速文档的开启与节省记忆体的使用;如果需要显示图片了,ImageProxy的 draw()会被调用,而这时才真正创建Image物件,以从硬碟中载入图片。

Proxy模式的 UML 结构图如下所示:

Proxy

在调用RealSubject的request()之前,Proxy物件也许会有一些预先处理的操作,就假设我们组织为preOperation()与 postOperation()好了,当客户对Proxy发出request()请求后,一个可能的时序图如下所示:

Proxy

您的preOperation()与postOperation()正决定了Proxy模式使用于何种情况,例如一个Remote Proxy的情况,可以为一个远端真实物件提供一个局部代表;Protection Proxy控制对物件的访问,您可以使用它来作不同级别、权限的存取控制;Cache Proxy为一个物件提供临时的储存,使得许多客户端都能直接存取它,而不用对真实物件直接要求,只有在必要的时候更新这个临时物件,或是让客户直接存取真实物件。


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织