我正在尝试学习装饰器设计模式。
我有一个很好的用途和学习编码的场景如下:
一个命令行输出程序。装饰器将包装一个 outputText 类,并为输出添加额外的功能,例如文本颜色、粗体文本、闪烁文本等。
这会被认为是对这种模式的一种很好的使用,还是我错过了它的重点?
我正在尝试学习装饰器设计模式。
我有一个很好的用途和学习编码的场景如下:
一个命令行输出程序。装饰器将包装一个 outputText 类,并为输出添加额外的功能,例如文本颜色、粗体文本、闪烁文本等。
这会被认为是对这种模式的一种很好的使用,还是我错过了它的重点?
我认为你的想法是合理的。它与GoF book中给出的文本编辑器示例非常相似。
在那本书中,他们使用了文本编辑器的示例,以及用于绘制窗口、加粗文本等的类。他们在一章中使用装饰器模式的示例来模仿您所描述的内容,所以我会说您是对的追踪。
所以更进一步,你会有一个用于斜体文本的装饰器类,另一个用于粗体文本等。好吧,有人可能会争辩说你可以有一个类来为你做这件事TextFormatter
,但你只需要使用适合的你的情况。
装饰器模式允许通过使用委托而不是继承来添加特性(结构和行为)。您的示例正是它的一个很好的应用。好处是基于这样一个事实,您可以拥有一个类的许多不同的装饰器,而不必创建继承关系的意大利面条图。
此维基百科页面提供有关此模式的更多信息