Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 正确使用装饰图案_Oop_Design Patterns_Decorator - Fatal编程技术网

Oop 正确使用装饰图案

Oop 正确使用装饰图案,oop,design-patterns,decorator,Oop,Design Patterns,Decorator,我正在努力学习装潢师的设计模式 为了更好地使用和学习编码,我的场景如下所示: 一种命令行输出程序。装饰器将包装一个outputText类,并为输出添加额外的功能,如文本颜色、粗体文本、闪烁文本等 这会被认为是对这种模式的一种很好的使用,还是我没有抓住它的要点?我认为你的想法是正确的。它与中给出的文本编辑器示例非常相似 在那本书中,他们使用了一个文本编辑器的例子,以及用于绘制窗口、加粗文本等的类。他们在一章中使用了装饰器模式的例子,模仿了您所描述的内容,所以我认为您的思路是正确的 进一步说,你会有

我正在努力学习装潢师的设计模式

为了更好地使用和学习编码,我的场景如下所示:

一种命令行输出程序。装饰器将包装一个outputText类,并为输出添加额外的功能,如文本颜色、粗体文本、闪烁文本等


这会被认为是对这种模式的一种很好的使用,还是我没有抓住它的要点?

我认为你的想法是正确的。它与中给出的文本编辑器示例非常相似

在那本书中,他们使用了一个文本编辑器的例子,以及用于绘制窗口、加粗文本等的类。他们在一章中使用了装饰器模式的例子,模仿了您所描述的内容,所以我认为您的思路是正确的


进一步说,你会有一个用于斜体文本的装饰类,另一个用于粗体文本等。好吧,有人可能会说你可以有一个类来为你做这件事,例如
TextFormatter
,但你只需要使用适合你情况的东西。

装饰模式允许添加功能(结构和行为)通过使用委托而不是继承。你的例子正是它的一个很好的应用。好处在于,一个类可以有许多不同的装饰器,而不必创建继承关系的意大利面图

此wikipedia页面提供了有关此模式的更多信息