4

例如,假设我有一个可以添加到购物车的 Product 类。当它也在购物车中时,我可能希望能够将它与另一件商品打包在一起,并添加 15% 的折扣。

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

这是一个抽象的例子,所以随它去吧。

4

2 回答 2

3

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

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

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

于 2009-11-14T01:34:57.200 回答
0

看看你的域名。

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

于 2009-11-14T01:34:26.363 回答