何时适合为对象创建装饰器,何时适合重写对象以允许应用策略?

时间:2009-11-14 01:24:50

标签: design-patterns decorator strategy-pattern

例如,假设我有一个可以添加到购物车的Product类。我可能希望能够将它与其他商品一​​起包装在购物车中并添加15%的折扣。

产品类是否应该使用允许交易的新子类进行装饰,或者是否应重新设计产品类以允许购物车将降价“策略”对象附加到产品上,从而降低价格?

这是一个抽象的例子,所以请按照你的意愿去做。

2 个答案:

答案 0 :(得分:3)

装饰器是您可以应用的侵入性最小的模式之一 - 当您这样做时,您遵循开放/封闭原则,因为您的原始类永远不会被修改。我倾向于尽可能使用Decorator。当原始类不需要与扩展进行交互时,情况就是如此。

注入策略更具侵略性,因为必须修改获取策略的类才能接受策略(显然,一旦您进行了此修改,您可以应用许多不同的策略而无需进一步修改您的类)。当原始类需要与策略交互时(例如询问某些事情),我使用策略。

请注意,战略通常可以装饰......

答案 1 :(得分:0)

只看你的域名。

如果它是允许降价的产品(嗯...我不这么认为)那么你应该把它添加到产品中。 如果它是订单(imo,正确的地方做折扣)那么它应该在那里。