Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 客户有8或9种80%相似的产品。这是哪种设计模式?_Design Patterns - Fatal编程技术网

Design patterns 客户有8或9种80%相似的产品。这是哪种设计模式?

Design patterns 客户有8或9种80%相似的产品。这是哪种设计模式?,design-patterns,Design Patterns,我很熟悉Head First这本书(事实上,我认为这本书很精彩),尽管有时它让我对重叠的模式有些困惑。但之前并没有真正尝试坐下来将理论模式与现实世界的需求相匹配 嗯,我们现在有一个要求,我认为我们应该从模式的角度来考虑。我们的客户销售一系列产品,所有这些产品都是客户高度可配置的。对于每次销售,我们都需要捕捉客户对宽度、高度、颜色和一系列其他技术材料的选择。大体上,这些产品在所有这些数据方面有80%的相似性,但它们的差异足以使其变得复杂 这感觉像是一个“经典”的要求,所以这就是为什么我在思考模式。

我很熟悉Head First这本书(事实上,我认为这本书很精彩),尽管有时它让我对重叠的模式有些困惑。但之前并没有真正尝试坐下来将理论模式与现实世界的需求相匹配

嗯,我们现在有一个要求,我认为我们应该从模式的角度来考虑。我们的客户销售一系列产品,所有这些产品都是客户高度可配置的。对于每次销售,我们都需要捕捉客户对宽度、高度、颜色和一系列其他技术材料的选择。大体上,这些产品在所有这些数据方面有80%的相似性,但它们的差异足以使其变得复杂

这感觉像是一个“经典”的要求,所以这就是为什么我在思考模式。它是。。。呃。。战略模式?或者是装饰师?如果没有,是哪种模式

如果您需要知道我们将如何处理客户的选择。。。这将有助于计算成本价格、影响佣金等。这些操作对每种产品的工作方式大致相同,但在某些情况下可能因产品而异

我们曾经尝试过通过简单地对产品进行子类化来实现这一点,结果变得混乱,项目的这一部分被放弃了。我们拙劣的解决方案在头一本书中被描述为一个基本的错误{blush},大约在前五页内。

听起来这个方法在这里很有用


是的,我非常喜欢头一本书。读了这篇文章后,GoF对我来说完全有意义。

如果我正确理解了这个问题,你有8到9个独立的产品,我假设它们是某种类层次结构中的单个类。根据用户输入,您需要对这些类应用某些附加逻辑,如计算成本价格、影响佣金等

由于后者是运行时行为,因此对这个附加逻辑使用继承实际上不是一个好主意,因为最终会在每个产品类下创建许多几乎相同的子类层次结构

我不确定您提到的附加功能是否需要通过产品类本身的方法来访问,但是如果是这样的话,a将不是一个好的选择,因为装饰程序包装的对象不知道它正在包装,因此不能调用它的包装器。如果调用方只需要额外的行为,则可以选择一个装饰器,但对我来说,它仍然不太合适


这似乎更符合你的问题。例如,当用户选择不同的方法来计算成本价格时,您只需在产品对象上设置不同的策略实现
ICostCalculator
,从而对产品行为的这一特定方面进行运行时更改。在我看来,这正是您想要的。

当我想到战略模式时,我通常会想到可变的行动。与此相反,这更多的是关于修改和增强状态。正如你所提到的:有不止一点重叠,但这是我的大脑概括它的方式。