Java 装饰图案与使用超级
我刚刚开始学习decorator模式,我很困惑什么时候可以使用decorator模式,或者为什么它与只调用super不同,而不使用指向super类的指针 “…是一种设计模式,允许静态或动态地将行为添加到单个对象,而不影响同一类中其他对象的行为。” 这不就是子类化吗,还是我遗漏了什么Java 装饰图案与使用超级,java,decorator,Java,Decorator,我刚刚开始学习decorator模式,我很困惑什么时候可以使用decorator模式,或者为什么它与只调用super不同,而不使用指向super类的指针 “…是一种设计模式,允许静态或动态地将行为添加到单个对象,而不影响同一类中其他对象的行为。” 这不就是子类化吗,还是我遗漏了什么 public class Foo { protected void doSomething() { } } //using decorator pattern public class Bar exte
public class Foo {
protected void doSomething() { }
}
//using decorator pattern
public class Bar extends Foo {
private foo;
public Bar(Foo foo) {
this.foo = foo;
}
public void doSomething() {
foo.doSomething();
// extra code
}
}
//using super
public class Bar extends Foo {
@Overide
public void doSomething() {
super.doSomething();
// extra code
}
}
您缺少的是,您可以创建多个装饰器并任意组合它们 例如,如果您有一个表示GUI窗口的类
窗口,并且希望能够添加水平和/或垂直滚动条,那么通过子类化,您可能最终得到子类
垂直滚动窗口
,水平滚动窗口
,双向滚动窗口
,如果还想添加其他功能,则必须将每个功能组合为所有这些功能的另一个子类和原始的窗口
但是有了装饰师,你就避免了这种组合爆炸。您需要一个VerticalScrollDecorator
,一个HorizontalScrollDecorator
,要同时获得垂直和水平,您只需装饰两次。如果您有其他功能,则每个功能需要另一个装饰师。直接、简洁、清晰的回答。谢谢