装饰器模式注重的是对类的扩展。
代理模式针对的是对类中方法的增强。
我的理解是在增强类中是否在编译时期就确定持有被增强对象
//代理模式
public class Proxy implements Subject{
private Subject subject;
public Proxy(){
//关系在编译时确定
subject = new RealSubject();
}
public void doAction(){
….
subject.doAction();
….
}
}
//代理的客户
public class Client{
public static void main(String[] args){
//客户不知道代理委托了另一个对象
Subject subject = new Proxy();
…
}
}
//装饰器模式
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());
…
}
}
从概念上区分:
共同点:都是通过包装达到功能增强的目的结构型设计模式
不同点:代理模式着重代理的过程控制,而装饰器模式则是对类功能的加强或减弱,更注重类功能的变化。
关联点:装饰器模式可以说是静态代理模式的一个特殊应用