【问题标题】:Decorator Pattern - Multiple wrappers or quantity property?装饰器模式 - 多个包装器或数量属性?
【发布时间】:2011-05-30 23:15:40
【问题描述】:

我第一次使用装饰器模式,作为 Uni 项目的一部分。据我所见,该模式似乎更多地用于以模块化方式添加功能,但是我们已经学会了使用诸如咖啡或比萨饼机之类的用途,其中对象具有添加的模块化组件-更改属性而不是行为。

我正在尝试充分利用这两种用途,但是我提出了一个问题。在我们使用的书中的示例(Head First Design Patterns)中,该模式用于咖啡店制作不同的咖啡。因此,例如,牛奶、泡沫、糖、糖屑都是装饰物。

您将如何实现一个多次使用相同装饰器的系统(例如,加了两种糖的咖啡)?你会重新包装咖啡,还是给糖一个数量属性?或者(正如我开始怀疑的那样)这永远不会成为问题,因为该模式并非旨在以这种方式使用?

【问题讨论】:

  • 我倾向于向装饰器添加一个数量字段,但是多次应用同一个装饰器的想法很有趣。您可以尝试两种方式,看看您最喜欢哪种方式。

标签: java design-patterns decorator


【解决方案1】:

装饰器并不关心给定对象已经如何装饰。装饰器和给定对象都不存储有关此的任何信息。本质上,你想改变装饰器的行为/状态,所以这是在装饰器内部完成的。

所以,给Sugar 一个quantity 属性。您可以通过添加一个带有额外参数的新构造函数来做到这一点(并让标准构造函数默认 quantity1 并相应地记录它)。

【讨论】:

  • 谢谢 - 我倾向于这个,因为替代方案需要更多的工作,但我开始认为我没有按预期使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多