首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >装饰器未实现修饰的接口

装饰器未实现修饰的接口
EN

Stack Overflow用户
提问于 2019-07-23 13:48:09
回答 2查看 199关注 0票数 1

我有一个小项目,我用另一个类包装了一个类的对象。装饰类实现了一个接口,但Decorator类没有实现它。我想知道它是否仍然是装饰者模式或一些其他模式,在我的项目中," decorator“类应该被称为Wrapper而不是Decorator。

我检查了iluwatar github仓库(https://github.com/iluwatar/java-design-patterns/tree/master/decorator/src/main/java/com/iluwatar/decorator)和教程(https://www.tutorialspoint.com/design_pattern/decorator_pattern)。例如,在iluwatar中有:装饰器:

代码语言:javascript
运行
复制
public class ClubbedTroll implements Troll

装饰:

代码语言:javascript
运行
复制
public class SimpleTroll implements Troll

在这两种情况下(iluwatar和tutorialspoint),在装饰器和装饰类中都有共同的接口实现。这是否意味着必须将其称为装饰器设计模式?

EN

回答 2

Stack Overflow用户

发布于 2019-07-23 14:19:07

我要说的是,如果你没有在你的装饰器中实现接口,那么它就不能像原始的东西(装饰物)那样工作。如果你正在实现这个接口,你可以在任何地方使用这个装饰器,只要使用原始的接口If类就可以了。这就是为什么你必须使用接口。

如果你只是包装装饰过的,你就得到了一个包装器(委托模式)。

票数 2
EN

Stack Overflow用户

发布于 2019-07-23 14:21:39

Decrator pattern的本质是在不扩展对象的情况下向对象添加附加功能。关键字是additional,这意味着对象的公共API (或接口)仍然保持不变。没有这个概念,使用Decorator就没有意义了。

因此,问题实际上是“一个对象在没有实现interface的情况下仍然提供相同的公共API吗?”

我的意思是,在其他语言中这也是可能的,但在Java中这是没有意义的,因为你不能保证一个对象具有相同的公共API,因此依赖于它。

至于包装器--这是Adapter pattern的另一个名字。

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

https://stackoverflow.com/questions/57157434

复制
相关文章

相似问题

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