首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用多个装饰器时实现装饰器模式

如何在使用多个装饰器时实现装饰器模式
EN

Stack Overflow用户
提问于 2019-11-03 22:53:04
回答 2查看 48关注 0票数 1

我正在给一台咖啡机编程,里面有很多种咖啡。我提供普通咖啡,浓缩咖啡,卡布奇诺,但也有爱尔兰咖啡(威士忌,咖啡,糖,生奶油),西班牙咖啡(Cointreau,白兰地,咖啡,糖,生奶油)和意大利咖啡(阿马雷托,咖啡,糖,生奶油)。

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

我的解决方案是使用装饰器模式。然而,这将给我留下太多的装饰器,比如SugarDecoratorMilkDecoratorWhiskeyDecoratorAmarettoDecoratorWhippedCreamDecorator……

我如何在不为每个调味品添加装饰器的情况下解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2019-11-03 22:59:29

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

代码语言:javascript
复制
Coffee.builder().sugar(true).milk(true).build();

这样就没有额外的类,只有属性,但您需要在创建咖啡的基础上构建它

装饰器构建器模式使得在构造时可以轻松地构造可在独立方向上扩展的对象,而装饰器模式允许您在构造时之后向对象添加功能扩展

票数 1
EN

Stack Overflow用户

发布于 2019-11-04 08:52:55

这不是装饰者的案例,看起来你想添加可选的配料。为此,您可以使用@user7294900建议的Builder。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58681338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档