对于每种产品,都有相关的成本计算器,如:折扣,商家折扣,商家奖金,每月折扣等。将来会增加更多的成本计算器。
我们为每个成本计算都有一个具体的产品类和许多装饰器。所有产品都应使用所有计算器,因为计算器决定按产品属性(如产品商家ID,类别ID,颜色等)应用计算。
而且,我们系统中有数百万种产品需要计算。因此,我们更好地缓存装饰的计算器。因为,在运行时装饰每个产品实体将是昂贵的。但这对装饰模式来说很难。在我们的情况下使用这种模式似乎是一种气味。
你有什么建议?我们应该使用装饰器,策略还是责任链模式?或者没有模式。
答案 0 :(得分:3)
在策略模式中,对象的意图会发生变化。
因此,我认为策略将是一个不错的选择。
答案 1 :(得分:0)
所有产品都应该使用全部产品 计算器,因为计算器 决定应用他们的计算 产品的属性如产品 商家ID,类别ID,颜色等。
如果您需要让所有产品都使用所有装饰器,那么您并没有从模式中获得任何好处。这是否意味着如果你实现一个新的装饰器,必须更新所有现有的实体以使用那个新的装饰器?
装饰器应仅在必要时应用于产品,并且只应使用所需的装饰器。
我认为你应该从装饰者中删除决定;其他东西应决定是否应用装饰器,在这种情况下,它将产品包装在适当的装饰器中。这样你知道如果产品包装在装饰器中,那装饰器会影响(影响?)产品。