我正在努力教自己设计模式。我正在阅读有关Decorator
模式的内容,而且有一件事我无法理解。以下是维基百科上的示例:
让我们说我想实现一个可以水平和垂直滚动的窗口,我会这样做:
Window win=new Window();
win=new HorizontalScrollBarDecorator(win);
win=new VerticalScrollBarDecorator(win);
由于win
是Window
类型的引用,我既不能调用drawHorizontalScrollBar()
也不调用drawVerticalScrollBar()
(除了具体装饰器本身的代码之外),当然更改引用类型没有意义。
那么,我怎样才能增加新的行为" (I.E.实施新方法)装饰?
答案 0 :(得分:0)
没关系,我想我明白了:
通过装饰你不能添加新的行为"正如我解释的那样{drawHorizontalScrollBar()
在HorizontalScrollBarDecorator
类之外是不可见的,这意味着它可能是由draw()
方法调用的,但是你可以扩展它的方法基类。
它类似于扩展基类,覆盖draw()
方法,然后调用super.draw();
,区别在于您可以应用多个decorators
,但您无法继承来自多个班级。