什么时候需要使用装饰器模式?如果可能,请给我一个非常适合该模式的真实示例。

最佳答案

Java中的Streams-InputStreamOutputStream的子类是装饰器模式的完美示例。

例如,将文件写入磁盘:

File toWriteTo = new File("C:\\temp\\tempFile.txt");
OutputStream outputStream = new FileOutputStream(toWriteTo);

outputStream.write("Sample text".getBytes());

然后,您是否需要一些有关写入磁盘的其他功能:
File toWriteTo = new File("C:\\temp\\tempFile.txt");
OutputStream outputStream =
             new GZIPOutputStream(new FileOutputStream(toWriteTo));

outputStream.write("Sample text".getBytes());

通过简单地“链接”构造函数,您可以创建非常强大的写入磁盘的方式。这样的好处是您可以稍后添加不同的(在此示例中)OutputStream实现。而且,每个实现都不知道其他实现是如何工作的-它们都只能按照同一契约(Contract)运行。这也使得隔离测试每个实现非常容易。

在装饰器模式可以使用的地方有很多“真实世界”的例子。在我头顶上,有一些例子:
  • 读写磁盘(上)
  • 构建UI元素,例如将滚动条添加到文本区域等

  • Head First Design Patterns具有更多“真实世界”的示例。 O'Reilly似乎免费拥有他们的样本章节,该章节位于Decorator Pattern上。 Google显示了此链接: PDF

    关于design-patterns - 什么时候需要装饰器图案?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3477962/

    10-13 08:00