成本装饰者

时间:2009-06-01 09:29:51

标签: design-patterns decorator strategy-pattern

对于每种产品,都有相关的成本计算器,如:折扣,商家折扣,商家奖金,每月折扣等。将来会增加更多的成本计算器。

我们为每个成本计算都有一个具体的产品类和许多装饰器。所有产品都应使用所有计算器,因为计算器决定按产品属性(如产品商家ID,类别ID,颜色等)应用计算。

而且,我们系统中有数百万种产品需要计算。因此,我们更好地缓存装饰的计算器。因为,在运行时装饰每个产品实体将是昂贵的。但这对装饰模式来说很难。在我们的情况下使用这种模式似乎是一种气味。

你有什么建议?我们应该使用装饰器,策略还是责任链模式?或者没有模式。

2 个答案:

答案 0 :(得分:3)

在策略模式中,对象的意图会发生变化。

因此,我认为策略将是一个不错的选择。

答案 1 :(得分:0)

  

所有产品都应该使用全部产品   计算器,因为计算器   决定应用他们的计算   产品的属性如产品   商家ID,类别ID,颜色等。

如果您需要让所有产品都使用所有装饰器,那么您并没有从模式中获得任何好处。这是否意味着如果你实现一个新的装饰器,必须更新所有现有的实体以使用那个新的装饰器?

装饰器应仅在必要时应用于产品,并且只应使用所需的装饰器。

我认为你应该从装饰者中删除决定;其他东西应决定是否应用装饰器,在这种情况下,它将产品包装在适当的装饰器中。这样你知道如果产品包装在装饰器中,那装饰器会影响(影响?)产品。