代理模式看起来非常像装饰器模式。
对装饰器模式来说装饰者(decorator)和被装饰者(decoratee)都实现同一个 接口。对代理模式来说代理类(proxy class)和真实处理的类(real class)也都实现同┅个接口。此外不论我们使用哪一个模式,都可以很容易地在真实对象的方法前面或者后面加上自定义的方法
然而,实际上在装饰器模式和代理模式之间还是有很多差别的。装饰器模式关注于在一个对象上动态的添加方法然而代理模式关注于控制对对象的访问。换呴话 说用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息因此,当使用代理模式的时候我们常常在一个代理类中创建一个对象的实例。并且当我们使用装饰器模式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了而装饰者能够在运行时递归地被构造。
代理偏重因自己无法完成或自己無需关心,需要他人干涉事件流程更多的是对对象的控制。
装饰偏重对原对象功能的扩展,扩展后的对象仍是是对象本身
代理模式,注重对对象某一功能的流程把控和辅助它可以控制对象做某些事,重心是为了借用对象的功能完成某一流程而非对象功能如何。
装飾模式注重对对象功能的扩展,它不关心外界如何调用只注重对对象功能的加强,装饰后还是对象本身
对于代理类,如何调用对象嘚某一功能是思考重点而不需要兼顾对象的所有功能;
对于装饰类,如何扩展对象的某一功能是思考重点同时也需要兼顾对象的其它功能,因为再怎么装饰本质也是对象本身,要担负起对象应有的职责
依旧我们来举个例子,好理解一下小明想要出国去旅游,但是呢小明是第一次,所以对整个流程都不熟悉,需要一个人来帮他来完成这些事情所以就找了一家旅游公司,那么这个旅游公司呢僦是这个代理了,在小明出国旅游之前就确定了是小明与旅游公司的关系。
采用一个代理类调用原有的方法且对产生的结果进行控制。这种方法就是代理模式
使用代理模式,可以将功能划分的更加清晰有助于后期维护!