例如,假设我有一个可以添加到购物车的Product类。我可能希望能够将它与其他商品一起包装在购物车中并添加15%的折扣。
产品类是否应该使用允许交易的新子类进行装饰,或者是否应重新设计产品类以允许购物车将降价“策略”对象附加到产品上,从而降低价格?
这是一个抽象的例子,所以请按照你的意愿去做。
答案 0 :(得分:3)
装饰器是您可以应用的侵入性最小的模式之一 - 当您这样做时,您遵循开放/封闭原则,因为您的原始类永远不会被修改。我倾向于尽可能使用Decorator。当原始类不需要与扩展进行交互时,情况就是如此。
注入策略更具侵略性,因为必须修改获取策略的类才能接受策略(显然,一旦您进行了此修改,您可以应用许多不同的策略而无需进一步修改您的类)。当原始类需要与策略交互时(例如询问某些事情),我使用策略。
请注意,战略通常可以装饰......
答案 1 :(得分:0)
只看你的域名。
如果它是允许降价的产品(嗯...我不这么认为)那么你应该把它添加到产品中。 如果它是订单(imo,正确的地方做折扣)那么它应该在那里。