我熟悉《Head First》一书(事实上,我认为它很棒),尽管有时它让我对模式重叠感到有点困惑。但之前并没有真正尝试过坐下来将理论模式与现实世界的要求相匹配。
嗯,我们现在有一个需求,我认为我们应该从模式的角度来思考。我们的客户销售大量产品,所有这些产品都可由客户高度配置。对于每笔销售,我们都需要捕获客户对宽度、高度、颜色和许多其他技术内容的选择。总体而言,这些产品在所有这些数据方面有 80% 的相似度,但它们的差异足以使其变得复杂。
这感觉像是一个“经典”要求,所以这就是我考虑模式的原因。这是……呃……战略模式吗?或者也许是装饰者?如果不是,那是什么模式?
如果您需要知道我们将如何处理客户的选择...这将有助于计算成本价,影响佣金等。这些操作对于每种产品来说大致都是以相同的方式工作的,但是在某些情况下,不同产品可能存在很大差异。
我们之前曾经尝试过通过简单地对产品进行子类化来实现这一点,但它变得困惑,并且项目的这一部分被放弃了。我们无能的解决方案在《Head First》一书中被描述为大约前五页内的一个基本错误{脸红}。
最佳答案
如果我正确理解了这个问题,那么您有 8 或 9 个单独的产品,我认为它们是某种类层次结构中的各个类。根据用户输入,您需要对这些类应用某些附加逻辑,例如计算成本价、影响佣金等。
由于后者是运行时行为,因此对这个附加逻辑使用继承确实不是一个好主意,因为您最终会在每个产品类下创建许多几乎相同的子类层次结构。
我不确定您提到的附加功能是否需要通过产品类本身的方法来访问,但如果是这样,Decorator不太适合,因为被装饰器包装的对象不知道它正在被包装,因此无法调用其包装器。如果仅调用者需要额外的行为,装饰器可能是一个选择,但它似乎仍然不太适合我。
Strategy pattern似乎更符合你的问题。例如,当用户选择不同的方式来计算成本价格时,您只需在产品对象上设置不同的 ICostCalculator
策略实现,从而对产品行为的这一特定方面进行运行时更改。在我看来,这正是您正在寻找的东西。
关于design-patterns - 客户有 8 或 9 个产品,其中 80% 相似。这是哪种设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3993164/