代理模式
1.代理模式动机及定义
1.1模式动机
某人要找对象,但是由于某些原因(如工作太忙)不能直接去找,于是委托一个中介机构去完成这一过程,如婚姻介绍所,在这里婚姻介绍所就是一个代理,与此相类似的还有房屋中介,职业中介,它们充当的都是一个代理的角色。所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在我们所开发的软件系统中有时候也存在这样的情况,如调用一个远程的方法,需要在本地设置一个代理,使得就像调用本地方法一样来使用远程的方法,这实际上就是RMI,Web Service等的实现原理。
在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以在客户端和目标之间起到中介的作用,并且可以通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外服务。
如在网页上查看一张图片,由于网速等原因图片不能立即显示,可以在图片传输过程中先把一些简单的用于描述图片的文字(或者小图片)传输到客户端,此时这些文字(或者小图片)就成为了图片的代理。
再举一个例子,如果某台远程服务器提供了一个功能强大的加密算法,而现在正在开发的系统又需要使用到该算法,由于该算法位于远程服务器端,封装该算法的对象就位于远程服务器的内存中,本地内存中的对象无法直接访问,因此需要通过一个远程代理的机制来实现对远程对象的操作。
以上两个例子都引入了一个新的对象(如小图片和远程代理对象)来实现对真实对象的操作或者将新的对象作为真实对象的一个替身,这种实现机制即为代理模式,通过引入代理对象来间接访问一个对象,这就是代理模式的动机。
1.2模式定义
代理模式(Proxy Pattern)定义:给某一个对象提供一个代理,并由代理对象控制对原对象对引用。代理模式对英文叫做Proxy或Surrogate,它是一种对象结构型模式。
英文定义:“Provide a surrogate or placeholder for another object to control access to it.”