更新:因为我们通常说,"情况将决定任何设计模式是否适合这项工作"......现在生活中的咖啡订购系统是否可以使用装饰模式解决?
装饰模式是否太过于实施咖啡订购系统?Head First Design Patterns一书以它为例,但我想我会用2个数组或表来实现它:
咖啡类型(法国烤,房子混合等)
添加(焦糖,奶油,肉桂等)
所以它可以是price.php中的2个数组,或DB中的2个数组,并读入2个数组.
当客户订购咖啡时,选择将总结价格.
看起来使用装饰器模式是相当矫枉过正的,或者你认为有充分的理由实际使用这种模式?作为一个例子,我认为它很好,但是如果它看起来像一个现实生活中的问题,它可以用一种简单的方法完全解决,但是使用更复杂的解决方案也会感觉很奇怪.
这是高级抽象示例的典型问题.该示例必须足够简单,易于理解和演示概念,这也意味着对于许多设计模式而言,它也更容易以另一种方式实现.
也就是说,我通常看到装饰器描述的方式是在窗口系统中.您有一个标准窗口,并且您希望允许窗口水平和垂直滚动.您可以为窗口子类化所有可能的变体,或者您可以提供一个水平滚动条装饰器和一个执行任务的垂直滚动条装饰器,并且具有额外的好处,您可以随后装饰其他控件,而无需子类甚至更多.这对我来说是一个完全有效的用途,它可以提供想法,但是提供示例代码要困难得多.