之所以将这两个放在一起,是因为这两个在功能上优点类似。
但是我们这里主要讨论其异同点:
- 功能上来讲:代理模式主要是为了控制对对象的访问。换句话说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。而装饰器模式是为了对原有对象进行功能增强。
- 从实现上来讲:代理模式是在代理类中创建并初始化某个被代理的对象,而装饰器模式需要持有外部传入实例对象的引用。
- 从创建时期上来讲:使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造(因为是外部传入被装饰的对象)。