【发布时间】:2009-11-14 01:24:49
【问题描述】:
例如,假设我有一个可以添加到购物车的 Product 类。当它也在购物车中时,我可能希望能够将它与另一件商品一起打包并添加 15% 的折扣。
应该用允许交易的新子类来装饰产品类,还是应该重新设计产品类以允许购物车将降价“策略”对象附加到产品,从而降低价格?
这是一个抽象的例子,所以随它去吧。
【问题讨论】:
标签: design-patterns decorator strategy-pattern
例如,假设我有一个可以添加到购物车的 Product 类。当它也在购物车中时,我可能希望能够将它与另一件商品一起打包并添加 15% 的折扣。
应该用允许交易的新子类来装饰产品类,还是应该重新设计产品类以允许购物车将降价“策略”对象附加到产品,从而降低价格?
这是一个抽象的例子,所以随它去吧。
【问题讨论】:
标签: design-patterns decorator strategy-pattern
装饰器是您可以应用的侵入性最小的模式之一 - 当您这样做时,您遵循开放/封闭原则,因为您的原始类永远不会被修改。我倾向于尽可能使用装饰器。当原始类不需要与扩展进行交互时,通常会出现这种情况。
注入策略更具侵入性,因为必须修改获取策略的类以接受策略(显然,一旦您进行了此修改,您可以应用许多不同的策略而无需进一步修改您的类)。当原始类需要与策略交互时(例如,向它询问某事),我会使用策略。
请注意,策略通常可以被装饰......
【讨论】:
看看你的域名。
如果它是允许降价的产品(嗯...我不这么认为)那么你应该将它添加到产品中。 如果是订单(imo,打折的好地方),那么它应该在那里。
【讨论】: