修饰器模式java.io.reader

问题描述:

对于学校报告,我必须解释java.io.Reader包如何实现Decorator pattern。我已经看到java.io包的多个解释(例如here),但不是java.io.Reader包(如果甚至有所不同)。这是我现在拥有的,我知道这个设计没有正确显示,但我不确定java.io.Reader包是如何实现的。修饰器模式java.io.reader

decorator java.io.Reader

因此,在这种情况下,Reader将是Component,该InputStreamReaderConcrete Component,该BufferedReaderDecoratorLineNumberReaderConcrete Decorator。再次,我知道这是错误的,但我不知道如何正确显示它。

+0

该案件是正确的;你可以添加'>'到BufferedReader。就个人而言,我不会真的把这称为装饰模式的例子。专业人士认为:BufferedReader包装其他Reader。即使它不是接口,它也有LineNumberReader来制作类似的图表。你可以争辩说,委托给与构造函数参数_“装饰”_相同的接口。 –

+0

添加LineNumberReader有点牵强,只是有一个类似的图。 –

该图正确。如果您有权访问Intellij(或其他有能力的工具),则可以看到Java类型的UML类图。下面的代码片段就是这样一个图表。

enter image description here

正如你所看到的,它与你的同意。有一点我会考虑,虽然是BufferedReader a 具体装饰因为它提供了Reader其他行为。

+0

谢谢!在这种情况下,你会说什么是装饰器而不是具体的装饰器?我仍然没有真正了解差异。 –

+0

@MeesKluivers,没问题。我想说,根据定义,装饰器将是一个包装'Reader'的类,但不会添加任何* new *行为或功能。 – ChiefTwoPencils