Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality.(动态地给一个对象添加一些额外的职责。 就增长功能来讲,装饰模式相比生成子类更为灵活设计模式
应用中一般代码如:ide
装饰类实现:flex
//构造方法,初始化成员变量为装饰类 public ConcreteDecorator1(Component component){ //抽象装饰器中定义的构造方法,初始化被装饰类到成员变量 super(component); } public void operate(){ //这里能够添加一些功能加强 this.component.operate() //这里能够添加一些功能加强 }
场景类应用:this
Component component = new ConcreteComponent(); //第一次修饰 component = new ConcreteDecorator1(component); //第二次修饰 component = new ConcreteDecorator2(component); //修饰后运行 component.operate();
装饰器模式最大的好处是动态扩展一类对象的功能,而且能够应用嵌套装饰无限扩展下去。 这是单单用继承来加强父类行为这种方式来扩展远比不了的吗,由于继承是静态的,扩展哪一个类都已经在定义类的时候决定了。.net
代理模式在前篇梳理过: 设计模式之代理模式。设计
总结下二者的区分:代理
代理模式对于整个系统来讲是控制了真实对象的访问,咱们每每只须要使用代理类完成相关业务功能就好了,被代理类相对透明。 若是是装饰器模式,那么咱们须要关注的是被装饰的类须要添加什么装饰这个过程,系统中的代码仍是得依赖被装饰对象。code