【问题标题】:Why the name "Decorator" for the Decorator design pattern?为什么将装饰器设计模式命名为“装饰器”?
【发布时间】:2023-04-06 16:39:01
【问题描述】:

谁能解释为什么选择“装饰器”这个名称来表示装饰器设计模式所传达的功能?

我一直觉得这个名字相当具有误导性,因为装饰器和标记界面的用途听起来与我非常相似。然而,虽然标记并没有真正“做任何事情”,但装饰器确实可以。但对我来说,装饰一词意味着被动,而这种用于添加功能的模式并非如此。

【问题讨论】:

  • 我想知道的部分原因是,对我来说,动词“装饰”在英语中的意思是“添加没有功能的美学”。至少在标记方面,标记的功能是有潜力的。

标签: design-patterns terminology decorator


【解决方案1】:

我相信该术语的起源来自使用不同组件(例如滚动条、关闭按钮等)装饰用户界面的示例使用。

编辑: Steven John Metsker 在“C# 中的设计模式”中参考第 308 页:

DECORATOR 的原始应用之一(大概也是 DECORATOR 得名的应用)在于构建 GUI 组件。

【讨论】:

    【解决方案2】:

    我认为类比是,当你装饰房子时,你并没有真正打破任何墙壁或类似的东西,你只是在周围放置一些东西(随心所欲),以改变它的外观(并且它的功能)。我认为选择这个词是为了暗示非侵入性,也是可选的。

    【讨论】:

      【解决方案3】:

      装饰器通过向现有方法添加额外功能来“装饰”接口,但实际上并未添加任何自己的功能。装饰对于基本功能来说不是必不可少的;否则它会被内置到基类中。

      【讨论】:

      • 但是“装饰”不是意味着你添加了一些不重要的东西吗?
      • 这只是一个比喻。它之所以有效,是因为我们已经同意它在软件设计意义上的含义。它不是一个完美的比喻这一事实并不会影响它的实用性,只要它足够好。
      【解决方案4】:

      因为您正在向现有对象添加新功能。本质上,您是在用新功能“装饰”对象。

      嘿,留给极客来编名吧。

      【讨论】:

        猜你喜欢
        • 2010-09-21
        • 2010-10-05
        • 1970-01-01
        • 2014-02-20
        • 2011-01-02
        • 2012-01-09
        • 2021-05-10
        • 2021-04-01
        • 2019-01-18
        相关资源
        最近更新 更多