我有一个小项目,我用另一个类包装了一个类的对象。装饰类实现了一个接口,但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中有:装饰器:
public class ClubbedTroll implements Troll装饰:
public class SimpleTroll implements Troll在这两种情况下(iluwatar和tutorialspoint),在装饰器和装饰类中都有共同的接口实现。这是否意味着必须将其称为装饰器设计模式?
发布于 2019-07-23 14:19:07
我要说的是,如果你没有在你的装饰器中实现接口,那么它就不能像原始的东西(装饰物)那样工作。如果你正在实现这个接口,你可以在任何地方使用这个装饰器,只要使用原始的接口If类就可以了。这就是为什么你必须使用接口。
如果你只是包装装饰过的,你就得到了一个包装器(委托模式)。
发布于 2019-07-23 14:21:39
Decrator pattern的本质是在不扩展对象的情况下向对象添加附加功能。关键字是additional,这意味着对象的公共API (或接口)仍然保持不变。没有这个概念,使用Decorator就没有意义了。
因此,问题实际上是“一个对象在没有实现interface的情况下仍然提供相同的公共API吗?”
我的意思是,在其他语言中这也是可能的,但在Java中这是没有意义的,因为你不能保证一个对象具有相同的公共API,因此依赖于它。
至于包装器--这是Adapter pattern的另一个名字。
https://stackoverflow.com/questions/57157434
复制相似问题