装饰者模式

类图

装饰者模式_第1张图片
  • 所有原始类与装饰者类都必须实现共同基类Beverage
  • 所有装饰者类都持有另外一个属于基类类型的对象引用(这个饮用可以是原始类,也可以是装饰者类)
  • 如果使用继承实现,每一种组合都必须编写一个对应的类,最后类的数量会变得无限大。因为继承实现,类的行为在编译期间就已经确定,组合的方式使得各种行为可以在“运行时”动态随意组合以实现层出不穷的新效果。

一些限制

  • 会出现很多小类,其他代码查看人员不容易理解。
  • 有的客户端代码不是依赖于超类型,而是依赖某个特殊的装饰类型或者基础类型,装饰将会受到限制。

实际项目中的应用

  • 最著名的java.io库设计
装饰者模式_第2张图片

你可能感兴趣的:(装饰者模式)