【问题标题】:Is the abstract component in the decorator pattern redundant?装饰器模式中的抽象组件是多余的吗?
【发布时间】:2014-11-12 09:34:27
【问题描述】:

我尝试理解装饰器模式,在"Head First Design Patterns" 中阅读后出现了一个问题。

如果我不使用 abstact component interface 并让我的装饰器从 Beverage class 继承,我将获得相同的功能。我不明白abstract decorator 有什么用处。

让我向您展示我的类结构在没有abstract component 的情况下是什么样子(这是在 vb 中,但这些语句应该很容易翻译成任何其他语言):

谁能解释一下,为什么我需要抽象装饰器类?

【问题讨论】:

    标签: design-patterns decorator


    【解决方案1】:
    • 如果直接从 Beverage 继承,所有装饰器类都需要声明和维护它自己装饰的具体组件的引用。在您的示例代码中,Milk 类需要在变量 myBeverage 中维护引用。

    • 因此,如果您直接继承,则会在所有装饰器类(Milk、Mocha 等)中创建代码重复

    • 对所有装饰器使用公共类还有一个好处是,如果需要,它为饮料类中定义的方法提供默认实现,装饰器类只需要覆盖它想要添加扩展行为的方法。例如。假设您所有的装饰器(牛奶、摩卡等)价格相同,只是描述不同。所以在 CondimentDecorator 中,它可以为 cost() 提供一个默认实现,委托给具体组件。所有的装饰器都不再需要实现这个 cost() 方法了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 2017-05-13
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 2011-01-02
      相关资源
      最近更新 更多