0

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

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

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

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

4

2 回答 2

3

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

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

于 2009-06-01T09:38:32.397 回答
0

所有产品都应使用所有计算器,因为计算器决定根据产品属性(如产品商家 ID、类别 ID、颜色等)应用其计算。

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

装饰器应仅在必要时应用于产品,并且仅应应用那些需要的装饰器。

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

于 2009-06-01T09:44:56.050 回答