gpt4 book ai didi

java - 为什么在装饰器模式中抽象装饰器 "has a"和 "is a"抽象组件?

转载 作者:行者123 更新时间:2023-11-29 04:55:14 28 4
gpt4 key购买 nike

我在许多与装饰器模式相关的UML类图中看到,抽象装饰器既包含抽象组件又同时扩展了抽象类组件。

例如,在第二个示例中,与来自以下链接的咖啡制作场景相关:

https://en.wikipedia.org/wiki/Decorator_pattern#Examples

CoffeeDecorator 扩展了抽象组件 Coffee 并包含一个类型为 Coffee 的字段。这是为什么?这只是一个案例,还是我们应该始终构建这样的“装饰器系统”,为什么?

我认为 CoffeeDecorator 只需要包含它想要装饰的组件,因为 CoffeeDecorator 实际上不是 Coffee.

最佳答案

装饰器/包装器可以用在任何可以使用包装对象的地方(“是一个”)。这就是它必须扩展/实现类/接口(interface)的原因。

装饰器/包装器还引用了它要装饰/包装的实例(“有一个”)。

如您问题中的链接示例所示,您可以编写:

 Coffee coffee = new WithMilk(new SimpleCoffee());

其中 WithMilk 是装饰器。

关于java - 为什么在装饰器模式中抽象装饰器 "has a"和 "is a"抽象组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34044475/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com