每个产品都有相关的成本计算器,如:折扣,商家折扣,商家奖励,每月折扣等。在未来,将添加更多的成本计算器。
我们有一个具体的产品类和每个成本计算的许多装饰器。所有产品都应该使用所有的计算器,因为计算器决定根据产品的属性来应用它们的计算,如产品商家id,类别id,颜色等。
而且,我们的系统中有数百万个产品需要计算。所以,我们最好缓存装饰过的计算器。因为,在运行时修饰每个产品实体的成本会很高。但是使用装饰器模式很难做到这点。在我们的情况下使用这种模式似乎是一种味道。
你有什么建议?我们应该使用装饰器、策略还是责任链模式?或者没有模式。
发布于 2009-06-01 09:44:56
所有产品都应该使用所有的计算器,因为计算器决定根据产品的属性来应用它们的计算,如产品商家id,类别id,颜色等。
如果你需要让所有的产品都使用所有的装饰器,那么你并没有从模式中获得任何好处。这是否意味着如果您实现一个新的装饰器,所有现有的实体都必须更新以使用新的装饰器?
装饰器应该只在必要的时候应用于产品,并且只应该应用那些需要的装饰器。
我认为你应该从装饰器中删除这个决定;其他东西应该决定是否应用装饰器,在这种情况下,它将产品包装在适当的装饰器中。这样你就知道如果一个产品被包装在一个装饰器中,这个装饰器正在影响(效果?)产品。
发布于 2009-06-01 09:38:32
在策略模式中,对象的意图会发生变化。
因此,我认为战略将是一个很好的选择。
https://stackoverflow.com/questions/934124
复制相似问题