bacor

个人站

Coding is important, so is writing


装饰模式

装饰模式可以理解成用组合的方式给对象增加功能。

定义

动态地给一个对象增加添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

通用类图如下:

在类图中有两种角色(不区分抽象和实现类)。其中Component是最核心、最原始的对象,类图中可以是接口或者抽象类。Decorator即装饰类,里面包含指向Component的指针,并且有相应的方法给Component增加功能。

优点

  1. 装饰模式是继承的一个替代方案,还是is-a的关系,但是灵活性大大提高
  2. 可以动态扩展一个类的功能
  3. 装饰类和被装饰类没有耦合,可以独立发展

缺点

系统复杂度会随装饰的层数增多而极具增加

使用场景

在Java中常见的StringBuilder、StringBuffer就是使用了装饰模式

  • 需要为一批兄弟类增加或改装功能,首选装饰模式
  • 需要为一个类扩展功能时

参考:

设计模式之禅