使用列表而不是装饰器模式?
“Head First: Design Patterns”一书中的装饰器模式用例让我有了这个问题。我会试着把它写下来:
这是一个咖啡店系统,里面有一些咖啡和很多调味品,你可以把它们放进去(需要额外付费),你需要能够订购咖啡和收费,里面有顾客想要的任何调味品,并且为了避免完全混乱(例如,布尔值来跟踪调味品),使用装饰器图案。我们有一个抽象的饮料类,每种类型的咖啡作为混凝土成分,每种调味品作为混凝土装饰器包装饮料,如下所示:
因此,我们有以程返回咖啡成本:
我的问题是:为什么不用列表而不是装饰器来实现这一点呢?我们可以在每种饮料中列出调味品,并通过迭代列表来计算成本。要订购咖啡,我们只需要将其实例化一次并添加所需的调味品,避免如下声明:
// Using second image example
Beverage beverage = new DarkRoast(beverage);
beverage = new Mocha(beverage);
beverage = new Whip(beverage);
除此之外,我们还将有更大的灵活性来操作,例如为不包括调味品的咖啡提供折扣,一旦我们没有装饰师包装咖啡。这是一个长期研究的问题,我知道我错过了一些东西,或者我做错了什么,所以如果你对此有任何想法,我很想知道并进一步讨论。