《大话设计模式》读书笔记四——代理模式

      在这章中,作者用了gg1代替gg2追mm最终gg1抱得美人归的故事来开讲代理模式,怎么看都觉得别扭。

      代理模式(Proxy),为其他对象提供了一种代理以控制对这个对象的访问。


                               代理模式结构图

     这是代理模式的定义,这里面的“其他对象”应该指的是和代理有相同接口的真实对象,也就是结构图中的RealSubject.
    光看结构图,让我感觉代理这个东西是画蛇添足了,因为它实现的功能都是RealSubject能实现的功能,而且它还必须依附于RealSubject(Proxy保存了RealSubject的引用),再往下了解,书中说代理模式有以下几个用处:
    (1)远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
    (2)虚拟代理,它是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象,以达到性能的最大优化。
    (3)安全代理,用来控制真实对象访问时的权限。
    (4)智能指引,是指当调用真实对象时,代理处理另外一些事。
     下面我来说我对代理四种用处的理解。
     远程代理,这种应用书中举例是WebService,在不同应用程序项目,可以使用代理来解决远程访问的问题。
     虚拟代理,书中用的浏览器加载图片的例子。个人觉得这个例子不太能让人理解这里说的虚拟代理。结合代理模式的结构图和虚拟代理的概念,我理解为有些对象实例化时开销很大,那么就创建它的代理,用代理去替换真实对象,而且在调用代理上真实对象的某个方法时,才会去实例化真实的对象,但这个时候代理已经存在了。
     安全代理,我的理解是用代理来控制真实对象不同的访问权限,即代理只实现了真实对象的部分方法。
     智能指引,光是看这个“智能指引”恐怕很难理解真正的用处是什么,这个应用指的是在代理中调用真实对象,但代理同时也处理另外一些事,比如计算真实对象应用的次数等。

下面是代理模式的代码

Code


 

posted on 2009-05-26 09:36  边写边唱  阅读(411)  评论(0编辑  收藏  举报

导航