装饰者模式与代理模式

来源:互联网 发布:淘宝蚂蚁花呗客服电话 编辑:程序博客网 时间:2024/06/04 18:15

昨天写了代理模式,今天就摘抄一段装饰者模式的对比,这俩实在是太像了。

装饰模式:以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案;

代理模式:给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用;


装饰模式应该为所装饰的对象增强功能;代理模式对代理的对象施加控制,并不提供对象本身的增强功能。

二者的实现机制确实是一样的,可以看到他们的实例代码重复是很多的。但就语义上说,这两者的功能是相反的,模式的一个重要作用是简化其他程序员对你程序的理解。

你在一个地方写装饰,大家就知道这是在增加功能,你写代理,大家就知道是在限制(这里看你对限制怎么理解了)。

虽然代码很可能相同,但如果你都叫他们装饰,别人会很迷惑的。

使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造(对象作为参数传人)。    

//装饰器模式public class Decorator implements Component{        private Component component;        public Decorator(Component component){            this.component = component        }       public void operation(){            ….            component.operation();            ….       }}

//装饰器的客户public class Client{        public static void main(String[] args){            //客户指定了装饰者需要装饰的是哪一个类            Component component = new Decorator(new ConcreteComponent());            …        }}

AOP是采用代理模式,再利用反射的机制。
装饰器模式的目的是,包装具有相同父类和接口的类.利用组合.然后重写相关的方法。
java.io里面就是装饰器模式的。


原创粉丝点击