Design patterns 在使用许多装饰器时,如何实现装饰器模式

Design patterns 在使用许多装饰器时,如何实现装饰器模式,design-patterns,Design Patterns,我正在用多种咖啡编程一台咖啡机。我提供普通咖啡、浓缩咖啡、卡布奇诺咖啡,但也提供爱尔兰咖啡(威士忌、咖啡、糖、鲜奶油)、西班牙咖啡(Cointreau、干邑、咖啡、糖、鲜奶油)和意大利咖啡(苦杏仁、咖啡、糖、鲜奶油) 我计划在未来添加更多种类的咖啡,这就是为什么添加更多咖啡需要很容易,而不需要为每种咖啡添加一个类 我的解决方案是使用decorator模式。然而,这将给我留下如此多的装饰者,如SugarDecorator,MilkDecorator,wickydecorator,amaretode

我正在用多种咖啡编程一台咖啡机。我提供普通咖啡、浓缩咖啡、卡布奇诺咖啡,但也提供爱尔兰咖啡(威士忌、咖啡、糖、鲜奶油)、西班牙咖啡(Cointreau、干邑、咖啡、糖、鲜奶油)和意大利咖啡(苦杏仁、咖啡、糖、鲜奶油)

我计划在未来添加更多种类的咖啡,这就是为什么添加更多咖啡需要很容易,而不需要为每种咖啡添加一个类

我的解决方案是使用decorator模式。然而,这将给我留下如此多的装饰者,如
SugarDecorator
MilkDecorator
wickydecorator
amaretodecorator
WhippedCreamDecorator

如何在不为每种调味品添加装饰剂的情况下解决此问题?

您可以使用添加更多咖啡属性,例如添加糖和牛奶:

Coffee.builder().sugar(true).milk(true).build();
这样就没有额外的类,只有属性,但您需要在创建咖啡的基础上构建它

构建器模式使构建一个在构建时可在独立方向上扩展的对象变得容易,而装饰器模式则允许您在构建后向对象添加功能扩展

这不是Decorator的情况,看起来您希望添加可选成分。为此,您可以按照@user7294900的建议使用生成器

当我们希望在使用早期对象作为原材料的同时向对象添加新功能时,可以使用Decorator模式。一般来说,我们为什么需要担心添加的装饰器类(在需要时),只要它们为现有对象提供所需的附加功能。装饰器类不会增加额外成本,因为它们可以在运行时随意添加,并且是按使用付费类型。

如何在c中实现这一点?不创建类?@Frogical请参见相关示例: