【问题标题】:Decorator pattern java.io.reader装饰器模式 java.io.reader
【发布时间】:2018-04-10 05:32:37
【问题描述】:

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

所以在这种情况下,Reader 将是 ComponentInputStreamReaderConcrete ComponentBufferedReaderDecoratorLineNumberReaderConcrete Decorator。同样,我知道这是错误的,但我不知道如何正确显示它。

【问题讨论】:

  • 大小写正确;您可以将 <<decorator>> 添加到 BufferedReader。就我个人而言,我不会真正将其称为装饰器模式的示例。赞成的观点:BufferedReader 包装了另一个 Reader。即使它不是一个接口,它也有 LineNumberReader 来制作类似的图表。您可能会争辩说,委托给与构造函数参数相同的接口 "decorates".
  • 添加 LineNumberReader 有点牵强,只是为了有一个类似的图表。

标签: java decorator java-io


【解决方案1】:

图表是正确的。如果您可以访问 Intellij(或其他功能强大的工具),您可以查看 Java 类型的 UML 类图。下面的 sn-p 就是这样一张图。

如您所见,它与您的一致。我会考虑的一件事是BufferedReader 一个具体的装饰器,因为它在Reader 上提供了额外的行为。

【讨论】:

  • 谢谢!在这种情况下,您会说什么是装饰器而不是具体的装饰器?我仍然没有真正得到区别。
  • @MeesKluivers,没问题。我想说,根据定义,装饰器是一个包装 Reader 但不添加任何 new 行为或功能的类。
猜你喜欢
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
  • 2011-07-18
  • 2013-07-01
相关资源
最近更新 更多