装饰器模式主要是为了获得具有动态选择的额外功能的对象吗?
我们可以做类似的事吗
window = Window.new(widht, height, x, y, [UseScrollBar.new, DrawBorder.new])
这样当我们调用draw()时,我们还会遍历其他功能吗?
例如,如果我们的目的是将write_line写入文件,使用嵌套,我们必须多次写入(多行到文件),但是通过循环,我们可以更灵活地处理我们的工作:拥有文本行,但循环通过额外功能列表,所以如果它是空的,我们写明文行,但如果有AddLineNumber,或AddTimeStamp,那么行被修改,然后一行写入文件
我希望我理解这种模式足以提出准确的问题。有些人使用额外功能列表而不是嵌套来实现装饰器模式吗?
答案 0 :(得分:1)
这取决于添加的功能列表是固定的还是应该是灵活的。您也可以使用某种构建器为您创建链:
window = WindowBuilder.new
.setWidth(w)
.setHeight(h)
.setX(x)
.setY(y)
.addScrollBar(scrollBar)
.addBorder(border)
.getWindow(h);
并且你将是一个BorderDecorator指向Scroll bar装饰器,指向实际的窗口。
答案 1 :(得分:0)
我的感觉是它可以。无论是附加功能列表还是嵌套功能列表,它仍然应该能够提供额外的功能。