Java IO类中是否存在Decorator Pattern?


14

对于一项作业,我必须找出四个类的设计模式中的哪个类java.io.Reader及其子类java.io.PushbackReaderjava.io.BufferedReader并使用java.io.FilterReader它们进行构建。

根据这篇文章,设计模式将是装饰器模式。这仅对我有意义PushbackReaderBufferedReader并且FilterReader可以装饰成可以同时使用,从而有效地创建了一个BufferedPushbackFilterReader。是这个主意吗?


查看这些类的构造函数。它们是否允许您堆叠,例如在Buffered 自然之上叠加Filter自然?
Kilian Foth 2011年

@基里安·佛斯(Kilian Foth):看起来像。

Answers:


10

是的,您确实可以这样装饰它们。只要考虑以下

PushbackReader pushbackBufferedReader = new PushbackReader(
     new BufferedReader(original));

这样可以装饰原始阅读器

  • 首先被缓冲
  • 然后启用推回/未读功能(仍然缓冲结果。)

FilterReader并且Reader是层次结构中的基类...


而且BufferedReaderFilterReaderPushbackReader都是装饰Reader,是吧?

1
对,那是正确的。
duffymo 2011年

1
是的-BufferedReader使基础阅读器处于缓冲状态,PushbackReader使您可以“不读取”阅读器中的数据,等等...

11

装饰图案在这里也适用,因为BufferedReader身体包裹Reader-这仍然是一个Reader(它的所有方法Reader),但它有更多的“花俏”(更多的方法)。

这是一个示例,显示一个类如何“装饰”它包装的那个类的功能,您可以将它们链接起来以保持装饰:

        new BufferedReader(new FileReader(new File("some.file")));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.