在阅读Decorator模式时,遇到了需要澄清的问题。在装饰器模式中,我们只是包装一个给定的对象并使用一系列执行来进行计算。但是为什么我们不能拥有这些对象的列表并遍历每个对象。我的意思是没有链,我们不能只使用列表和简单的迭代通过每个对象?
由于
答案 0 :(得分:6)
我相信你错过了装饰师的观点。
Decorator旨在透明地添加行为。典型的例子是Java中的InputStream。您可以将缓冲,gzip功能链接到输入流。但是,该装饰输入流的“用户”不需要知道添加了额外的行为。用户只需将该装饰流用作普通流。当然,如果您将每个“行为”作为单独的对象,并将链存储为另一个列表并明确地单独调用它们,它将起作用。然而,它失去了装饰者的“透明度”。
答案 1 :(得分:2)
使用列表,您需要一些对象来管理列表并遍历和应用对象。要与插件兼容,manager对象必须是所有对象的(通常是抽象的)基类的子类。它只是不如让每个物体知道它包裹的内容而具有灵活性。
答案 2 :(得分:0)
装饰动作将在Object中执行。有了列表,它在对象之外