【发布时间】:2016-10-05 06:45:45
【问题描述】:
最近我读到了关于装饰器设计模式的文章,但我遇到了一些我无法在网上找到的未解决问题。我不会展示代码,因为我不想让这个问题变得比实际更复杂。我简单举个例子:
赛百味店:
组件 --> 子三明治
ConcreteComponent --> 15cmSub, 30cmSub
装饰器 --> 成分
ConcreteDecorator --> 白奶酪、黄奶酪、果酱、鸡肉。
这正是赛百味商店的运作方式。选择你的核心三明治大小,然后添加你喜欢的所有配料。但我还有一些问题:
如果成分组合无效怎么办?例如,赛百味的政策规定,同一个潜艇中不能有两种奶酪。现在让我们假设浇头有 10000 种可能的组合,只有一种是无效的。这是否完全打破了装饰器模式?
如果两种成分相互依赖怎么办。例如,如果您订购生菜,那么您需要其他种类的蔬菜来制作“有效”的 Sub。
什么时候最好使用装饰器模式而不是带有 ArrayList 的 SubSandwich 类?我知道这里的成分不会添加行为,这使得 Subway 示例不准确,但我们假设它们确实如此。
为什么要扩展?为什么不使用接口?
【问题讨论】:
-
最后一个问题没看懂?使用接口意味着扩展这些接口。
标签: java design-patterns decorator