装饰器如何实现新行为?

时间:2014-09-03 21:58:02

标签: decorator

我正在努力教自己设计模式。我正在阅读有关Decorator模式的内容,而且有一件事我无法理解。以下是维基百科上的示例:Example 让我们说我想实现一个可以水平和垂直滚动的窗口,我会这样做: Window win=new Window(); win=new HorizontalScrollBarDecorator(win); win=new VerticalScrollBarDecorator(win);

由于winWindow类型的引用,我既不能调用drawHorizontalScrollBar()也不调用drawVerticalScrollBar()(除了具体装饰器本身的代码之外),当然更改引用类型没有意义。 那么,我怎样才能增加新的行为" (I.E.实施新方法)装饰?

1 个答案:

答案 0 :(得分:0)

没关系,我想我明白了: 通过装饰你不能添加新的行为"正如我解释的那样{drawHorizontalScrollBar()HorizontalScrollBarDecorator类之外是不可见的,这意味着它可能是由draw()方法调用的,但是你可以扩展它的方法基类。
它类似于扩展基类,覆盖draw()方法,然后调用super.draw();,区别在于您可以应用多个decorators,但您无法继承来自多个班级。