【结构型】装饰者模式

Posted by Liao on 2020-04-14

一、定义

动态(组合)地给一个对象增加一些额外的指责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数)

动态地把职责添加到对象上,若想添加功能,装饰者类提供了比继承更有弹性的方案。

二、结构

例子:很多中单品咖啡,很多种调料的不同组合

把被装饰着放到装饰者中管理,例如调料是装饰者,单品咖啡是被装饰者,则把单品咖啡放到调料中管理。

这种模式的好处是,当再需要增加一个单品咖啡时,只需要继承Coffee,即可计算出不同调料(装饰者)组合的价钱。

  • 通过采用组合而非继承的方式,Decorator模式实现了在运行时(编译时装配 => 运行时装配)动态扩展对象的能力,而且可以根据需要扩展多个功能。避免了使用继承带来的”灵活性差”和”多子类衍生问题”。
  • 既继承又组合,90%是装饰者模式