我们可以在Decorator模式中保留一系列功能而不是使用嵌套吗?

时间:2009-06-09 14:20:23

标签: design-patterns

装饰器模式主要是为了获得具有动态选择的额外功能的对象吗?

我们可以做类似的事吗

window = Window.new(widht, height, x, y, [UseScrollBar.new, DrawBorder.new])

这样当我们调用draw()时,我们还会遍历其他功能吗?

例如,如果我们的目的是将write_line写入文件,使用嵌套,我们必须多次写入(多行到文件),但是通过循环,我们可以更灵活地处理我们的工作:拥有文本行,但循环通过额外功能列表,所以如果它是空的,我们写明文行,但如果有AddLineNumber,或AddTimeStamp,那么行被修改,然后一行写入文件

我希望我理解这种模式足以提出准确的问题。有些人使用额外功能列表而不是嵌套来实现装饰器模式吗?

2 个答案:

答案 0 :(得分:1)

这取决于添加的功能列表是固定的还是应该是灵活的。您也可以使用某种构建器为您创建链:

window = WindowBuilder.new
                      .setWidth(w)
                      .setHeight(h)
                      .setX(x)
                      .setY(y)
                      .addScrollBar(scrollBar)
                      .addBorder(border)
                      .getWindow(h);

并且你将是一个BorderDecorator指向Scroll bar装饰器,指向实际的窗口。

答案 1 :(得分:0)

我的感觉是它可以。无论是附加功能列表还是嵌套功能列表,它仍然应该能够提供额外的功能。