装饰者模式与列表

时间:2012-07-23 00:57:17

标签: java design-patterns

在阅读Decorator模式时,遇到了需要澄清的问题。在装饰器模式中,我们只是包装一个给定的对象并使用一系列执行来进行计算。但是为什么我们不能拥有这些对象的列表并遍历每个对象。我的意思是没有链,我们不能只使用列表和简单的迭代通过每个对象?

由于

3 个答案:

答案 0 :(得分:6)

我相信你错过了装饰师的观点。

Decorator旨在透明地添加行为。典型的例子是Java中的InputStream。您可以将缓冲,gzip功能链接到输入流。但是,该装饰输入流的“用户”不需要知道添加了额外的行为。用户只需将该装饰流用作普通流。当然,如果您将每个“行为”作为单独的对象,并将链存储为另一个列表并明确地单独调用它们,它将起作用。然而,它失去了装饰者的“透明度”。

答案 1 :(得分:2)

使用列表,您需要一些对象来管理列表并遍历和应用对象。要与插件兼容,manager对象必须是所有对象的(通常是抽象的)基类的子类。它只是不如让每个物体知道它包裹的内容而具有灵活性。

答案 2 :(得分:0)

装饰动作将在Object中执行。有了列表,它在对象之外