装饰器模式 Java.io.Reader

3

我需要为一份学校报告解释java.io.Reader包如何实现装饰者模式。我已经看过多个关于java.io包的解释(例如这里),但是没有关于java.io.Reader包的(如果有区别的话)。这是我目前的内容,我知道这个设计并没有正确展示它,但我不确定java.io.Reader包实际上是如何实现的。

decorator java.io.Reader

在这种情况下,ReaderComponentInputStreamReaderConcrete ComponentBufferedReaderDecoratorLineNumberReaderConcrete Decorator。再次说明,我知道这是错误的,但我不知道如何正确地显示它。

这个案例是正确的;你可以在 BufferedReader 中添加 <<decorator>>。个人认为这并不是装饰器模式的一个很好的例子。支持的理由是:BufferedReader 包装了另一个 Reader。即使它不是一个接口,它也有 LineNumberReader 来创建类似的结构。你可以认为将构造函数参数委托给相同的接口是一种“装饰”。 - Joop Eggen
添加LineNumberReader有点牵强,只是为了拥有类似的图表。 - Joop Eggen
1个回答

1

这张图是正确的。如果你有Intellij(或其他类似工具)的访问权限,你可以看到Java类型的UML类图。下面的片段就是这样一个图。

enter image description here

如您所见,它与您的意见相符。不过我认为BufferedReader是一个具体装饰器,因为它在Reader上提供了额外的行为。


谢谢!在这种情况下,您认为装饰器会代替具体的装饰器吗?我仍然不太明白它们之间的区别。 - Mees Kluivers
@MeesKluivers,没问题。根据定义,装饰器应该是一个包装Reader但不添加任何行为或功能的类。 - ChiefTwoPencils

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接