4

我在测试中遇到了这个问题:

这是一种什么样的编程/设计模式:

FileReader fr = new FileReader("file.txt");
BufferedReader bf = new BufferedReader(fr);

很抱歉给您带来麻烦,但编程模式的定义对我来说还不清楚,我不知道如何正确回答这个问题。

4

2 回答 2

10

这是装饰者模式的一个例子。

正如链接的维基百科文章所述:

装饰器模式是一种允许将行为动态添加到现有对象的设计模式。

在您的示例中,您正在向 a 添加缓冲FileReader,这比常规的未缓冲 提供更有效的读取FileReader

于 2012-05-08T19:52:53.527 回答
1

这是Decorator模式。来自设计模式书:

意图:动态地为对象附加额外的职责。装饰器为扩展功能提供了一种灵活的替代子类的方法

...

适用性:使用装饰器

  • 动态和透明地向单个对象添加职责,即不影响其他对象。
  • 对于可以撤销的责任。
  • 当通过子类化扩展不切实际时。有时大量的独立扩展是可能的,并且会产生大量的子类来支持每种组合。或者一个类定义可能被隐藏或不能用于子类化。

在 的情况下BufferedReader,它将缓冲功能附加到FileReader.

如果你想了解更多关于模式的知识,我推荐阅读这本书(或者更轻松的“Head First Patterns”)。此外,关于 JDK 中的模式使用的 SO 上有很好的答案——非常酷的东西!

于 2012-05-08T19:59:55.527 回答