什么时候需要使用装饰器模式?如果可能,请给我一个非常适合该模式的真实示例。
最佳答案
Java中的Streams-InputStream
和OutputStream
的子类是装饰器模式的完美示例。
例如,将文件写入磁盘:
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)运行。这也使得隔离测试每个实现非常容易。在装饰器模式可以使用的地方有很多“真实世界”的例子。在我头顶上,有一些例子:
Head First Design Patterns具有更多“真实世界”的示例。 O'Reilly似乎免费拥有他们的样本章节,该章节位于Decorator Pattern上。 Google显示了此链接: PDF
关于design-patterns - 什么时候需要装饰器图案?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3477962/