代码之家  ›  专栏  ›  技术社区  ›  Zak

什么时候为对象创建一个装饰器是合适的,什么时候重写对象以允许应用策略是合适的?

  •  4
  • Zak  · 技术社区  · 15 年前

    例如,假设我有一个可以添加到购物车中的产品类。当它也在购物车里的时候,我可能想把它和另一个物品一起打包,再加上15%的折扣。

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

    这是一个抽象的例子,所以你可以随便拿。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Mark Seemann    15 年前

    decorator是您可以应用的入侵最小的模式之一——当您这样做时,您遵循打开/关闭原则,因为您的原始类从未被修改过。我倾向于尽可能使用装饰。当原始类不需要与扩展进行交互时,通常是这样。

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

    注意,策略通常可以被修饰…

        2
  •  0
  •   COTOHA    15 年前

    看看你的域名。

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