【发布时间】:2020-01-07 13:58:23
【问题描述】:
装饰器设计模式的典型uml图如下:https://www.dofactory.com/net/decorator-design-pattern
它们显示装饰器在界面周围。
问题是,它是接口还是具体类真的很重要吗?
首先,装饰器不应该挑剔包装对象的行为,它只是一层功能。所以我看不出这比使用界面有什么风险。
通常我会(喜欢)这样装饰:
class Foo{
public void doSmth(){
}
}
class LoggedFoo extends Foo{
private Foo wrappedFoo;
public LoggedFoo(Foo foo){wrappedFoo = foo;}
@override
public void doSmth(){
System.out.println("doSmth start");
wrappedFoo.doSmth();
System.out.println("doSmth end");
}
}
我认为我们不应该仅仅看到具体的类继承,因为“它很危险”。 那么,接口还是具体类,在这里重要吗?
【问题讨论】:
-
永远不要紧——关键是,一如既往,实现接口通常更干净,避免被锁定到具体类。
-
接口允许一个类实现多个接口,但具体类不允许
-
好吧,装饰器只扩展一个类
-
它“很重要”,因为这不是装饰器模式。
-
Michael 你这么说是因为我省略了 Foo 和 LoggedFoo 之间的“抽象装饰器”元素吗?