2012-07-23 69 views
4

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

感谢

回答

6

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

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

2

与列表,你需要一些对象来管理列表,并遍历和应用的对象。为了兼容插件,管理器对象必须是所有对象(通常是抽象的)基类的子类。它的灵活性比让每个对象都知道它包装什么都好,就是这样。