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 对于实现咖啡订购系统来说,Decorator模式是否太多了?_Design Patterns - Fatal编程技术网

Design patterns 对于实现咖啡订购系统来说,Decorator模式是否太多了?

Design patterns 对于实现咖啡订购系统来说,Decorator模式是否太多了?,design-patterns,Design Patterns,更新:因为我们通常会说,“情况将决定任何设计模式是否适合该工作”。。。现实生活中的咖啡点菜系统会使用Decorator模式解决吗 对于实现咖啡订购系统来说,Decorator模式是否太多了?Head First Design Patterns一书以它为例,但我认为我应该使用2个数组或表来实现它: 咖啡类型(用于法国烤肉、家庭混合等) 添加(焦糖、奶油、肉桂等) 因此,它可以是prices.php中的2个数组,也可以是DB中的2个表,并读入2个数组 当客户订购咖啡时,选择将汇总价格 看起来使用De

更新:因为我们通常会说,“情况将决定任何设计模式是否适合该工作”。。。现实生活中的咖啡点菜系统会使用Decorator模式解决吗

对于实现咖啡订购系统来说,Decorator模式是否太多了?Head First Design Patterns一书以它为例,但我认为我应该使用2个数组或表来实现它:

咖啡类型(用于法国烤肉、家庭混合等)
添加(焦糖、奶油、肉桂等)

因此,它可以是prices.php中的2个数组,也可以是DB中的2个表,并读入2个数组

当客户订购咖啡时,选择将汇总价格


看起来使用Decorator模式太过分了,或者你认为使用这个模式有很好的理由吗?作为一个例子,我认为这很好,但如果它看起来像一个现实生活中的问题,用一种简单的方式完全可以解决,但却使用了更复杂的解决方案,那么它也会让人感到奇怪。

这是一个典型的问题,有更高层次抽象的例子。该示例必须足够简单,以便易于理解和演示概念,这也意味着对于许多设计模式来说,它也更容易以另一种方式实现


也就是说,我通常看到的装饰器是在窗口系统中描述的。您有一个标准窗口,希望允许水平和垂直滚动窗口。您可以为所有可能的变体对窗口进行子类化,也可以提供一个水平滚动条装饰器和一个垂直滚动条装饰器来执行该任务,并具有额外的好处,即您可以装饰其他控件,而无需再进行子类化。(对我来说)这是一个非常有效的方法,可以让装饰者理解想法,但是提供示例代码要困难得多。

这是一个典型的问题,用于更高级别的抽象示例。该示例必须足够简单,以便易于理解和演示概念,这也意味着对于许多设计模式来说,它也更容易以另一种方式实现


也就是说,我通常看到的装饰器是在窗口系统中描述的。您有一个标准窗口,希望允许水平和垂直滚动窗口。您可以为所有可能的变体对窗口进行子类化,也可以提供一个水平滚动条装饰器和一个垂直滚动条装饰器来执行该任务,并具有额外的好处,即您可以装饰其他控件,而无需再进行子类化。(对我来说)这是一个非常有效的方法,可以让装饰师理解这些想法,但要提供示例代码要困难得多。

问题是,对于“它真的会是吗”没有特别的答案。取决于程序员。编写简短示例的人可以想出他们喜欢的任何模式,但只有当你了解系统的其余部分时,你才能决定结构

我相信当你给某个东西命名时,它就变成了你必须学习的东西,比如梯形法则——我认为这实际上只是常识,你知道这个领域。不要认为装饰模式是一种工具,它只是实现所需功能的一种方式。如果一个计数器类包装了一个整数,这是一个装饰器模式,还是我们不在乎


我会用你能想到的最合理的方式来编码,使用设计模式作为指导/想法。试着忘记他们的名字——只是让学习模式改善你的编程。(但在面试前再查一遍!)

问题是,“真的会吗”并没有特别的答案。取决于程序员。编写简短示例的人可以想出他们喜欢的任何模式,但只有当你了解系统的其余部分时,你才能决定结构

我相信当你给某个东西命名时,它就变成了你必须学习的东西,比如梯形法则——我认为这实际上只是常识,你知道这个领域。不要认为装饰模式是一种工具,它只是实现所需功能的一种方式。如果一个计数器类包装了一个整数,这是一个装饰器模式,还是我们不在乎


我会用你能想到的最合理的方式来编码,使用设计模式作为指导/想法。试着忘记他们的名字——只是让学习模式改善你的编程。(但是在面试前再查一遍!)

他们试图教授这个概念,而不是如何创建咖啡订购系统。在UI等更复杂的情况下使用装饰器模式

decorator模式可以在诸如javaio系统之类的地方使用。BufferedReader是阅读器的装饰器


这种模式非常有用,在某些地方它也很有用。

他们试图教授这个概念,而不是如何创建咖啡订购系统。在UI等更复杂的情况下使用装饰器模式

decorator模式可以在诸如javaio系统之类的地方使用。BufferedReader是阅读器的装饰器


这个模式非常有用,在某些地方它也有很好的用途。

像其他人提到的一样,在一本书所需的简单示例中,所解释的原理可能会有点丢失,但在现实世界中,当您编程更大更复杂的系统时,该模式将是更好的可维护性选择

我认为您在示例中缺少的一点是,decorator模式是关于添加行为的。在headfirst示例中,行为是计算成本

假设类是按照您描述的方式实现的,使用数组,然后合计成本。那就好了,