通用Java输出库或模式

时间:2009-11-03 14:50:13

标签: java open-source design-patterns

我正在从一个java应用程序中编写一堆数据,最终用户可以将其用于文件,控制台或任意侦听器。允许用户指定他们想要如何使用这些数据会很好。人们采取了什么方法解决这类问题,是否有一个很好的开源解决方案?我可以看到一些简单的东西,只需使用带有不同appender等的log4j ......

5 个答案:

答案 0 :(得分:1)

您是在谈论Java应用程序中的接口吗?

在这种情况下,只需提供InputStream / Reader即可从中读取您的数据或接受您为其编写数据的OutputStream / Writer

如果您正在谈论与外部程序的通信,那么执行UNIX工具多年来所做的事情:

  • 阅读stdin
  • 写信至stdout

这样用户可以随心所欲:

  • 在代码的其他命令输出中输入
  • 将文件内容传递给您的命令
  • 通过键盘输入命令输入
  • 将命令的输出传输到任何其他命令或文件

InputStream / Reader / OutputStream / Writer的想法基本上与应用于Java API的概念相同。

答案 1 :(得分:0)

您可以设计数据生成API,以便它可以使用通用WriterOutputStream;我个人更喜欢Writer,因为我认为它使API更好。

答案 2 :(得分:0)

解决方案取决于写入数据的特定接口。例如,应该写同步还是异步?如何传达写入错误? ...作为异常或通过监听器回调机制?要写入的数据格式是什么(例如顺序文本数据)。

如果没有更多信息,就不可能为您提供更好的解决方案,但我要说的是,将数据写入多个位置的一个常见抽象是使用java.io类(InputStream / OutputStreamReader / Writer)。

答案 3 :(得分:0)

我认为你要找的是外观模式。

实际上,InputStream / Reader / stdin和OutputStream / Writer / stdout就是这样。

答案 4 :(得分:0)

考虑输出数据所采用的形式,以及应用程序需要返回的响应对象,然后选择或创建满足这些要求的接口。

在最抽象的层面上,你会喷出一堆字节,所以OutputStream肯定是“字节接收器”的正确接口。如果Writer合适,则可以提高一级抽象,输出文本字符。如果您正在传递域对象,那么您可能需要更具体的东西。

但是我怀疑你的界面不需要比

复杂得多
public interface Consumer<T>
{
    public void consume(T obj);
}

可能带有返回类型,如果您的提供者关心那种事情(例如,记录处理的实体数量的int)。毫无疑问,开源项目中有很多接口符合类似的模式 - 毕竟,只有一个单一方法的界面中只有这么多的变化 - 但是没有什么可以让人想到的是“真正的一个版本”。这种模式。此外,它真的很容易理解,因为你不必担心实现,所以在大约60秒内自己滚动它几乎没有任何缺点。