我在我的考试中遇到了这个问题:
What kind of programming / design pattern is this:
FileReader fr = new FileReader("file.txt"); BufferedReader bf = new BufferedReader(fr);
非常抱歉给您带来麻烦,但是对于编程模式的定义我不是很清楚,不知道如何正确回答这个问题。
我在我的考试中遇到了这个问题:
What kind of programming / design pattern is this:
FileReader fr = new FileReader("file.txt"); BufferedReader bf = new BufferedReader(fr);
非常抱歉给您带来麻烦,但是对于编程模式的定义我不是很清楚,不知道如何正确回答这个问题。
这是“装饰器模式”(Decorator Pattern)的一个示例。
正如链接到的维基百科文章所述:
装饰器模式是一种设计模式,允许在现有对象上动态地添加行为。
在您的示例中,您正在向FileReader
添加缓冲区,提供比常规未缓冲的FileReader
更高效的读取。
这是装饰器
模式。来自设计模式一书:
意图:动态地将附加责任附加到对象上。 装饰器为扩展功能提供了一种灵活的替代方案,而不是通过子类化。
...
适用性:使用装饰器
- 动态透明地向单个对象添加责任,即不影响其他对象。
- 对于可以撤回的职责。
- 当通过子类扩展是不切实际的时候。有时可能存在大量独立扩展,并且会产生支持每个组合的子类爆炸。或者类定义可能被隐藏或无法进行子类化。
在BufferedReader
的情况下,它将缓冲功能附加到FileReader
。
如果您想了解更多关于模式的信息,我建议阅读这本书(或更轻松的“Head First Patterns”)。此外,SO上有一个关于JDK内部使用模式的精彩answer--非常棒!