2

任何人都可以解释为什么选择“装饰器”这个名称来表示装饰器设计模式所传达的功能吗?

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

4

4 回答 4

7

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

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

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

于 2009-01-05T19:49:09.010 回答
3

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

于 2009-01-05T19:53:48.597 回答
2

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

于 2009-01-05T19:48:43.880 回答
0

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

嘿,留给极客来编名吧。

于 2009-01-05T19:48:00.823 回答