定义

  • 在不改变原有对象的基础之上,将功能附加到对象上。提供了比继承更具有弹性的方案,能够动态扩展和动态撤销。
  • 隶属于结构性设计模式

优点

  • 继承的有力补充,比继承灵活,不改变原有对象的情况下,给一个对象扩展功能
  • 更加灵活,通过使用不同的装饰类以及这些装饰类的排列组合,可以实现不同效果。
  • 符合开闭原则

缺点

  • 会出现更多代码,增加程序的复杂
  • 动态装饰时,多层装饰时会更复杂

    类图

    image.png

  • Component是定义一个对象接口,可以给这些对象动态添加职责

  • ConcreteComponent 定义了一个具体对象,也可以给这个对象添加一些职责,
  • Decorator 装饰抽象类,继承了Component,从外类来扩展Conponent类的功能,但对于Conponent来说,是无需知道Decorator的存在。
  • ConcreteDecorator就是具体的装饰对象,起到给Component添加指责的功能

    总结

    装饰模式是为了已有的功能添加更多功能的一种方式,而这些新加入的功能只会在某些特定的条件下才会触发,而装饰模式却提供了一个非常好的解决案,他把每个要装饰的放在单独的类中,并让这个类包装称他所需要的装饰对象。当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地按顺序特使用装饰功能包装对象了。最大的好处就是有效的把类的核心指责和装饰功能区分,而且可以去除类中重复的装饰逻辑。