我正在从一个java应用程序中编写一堆数据,最终用户可以将其用于文件,控制台或任意侦听器。允许用户指定他们想要如何使用这些数据会很好。人们采取了什么方法解决这类问题,是否有一个很好的开源解决方案?我可以看到一些简单的东西,只需使用带有不同appender等的log4j ......
答案 0 :(得分:1)
您是在谈论Java应用程序中的接口吗?
在这种情况下,只需提供InputStream
/ Reader
即可从中读取您的数据或接受您为其编写数据的OutputStream
/ Writer
。
如果您正在谈论与外部程序的通信,那么执行UNIX工具多年来所做的事情:
stdin
stdout
这样用户可以随心所欲:
InputStream
/ Reader
/ OutputStream
/ Writer
的想法基本上与应用于Java API的概念相同。
答案 1 :(得分:0)
您可以设计数据生成API,以便它可以使用通用Writer
或OutputStream
;我个人更喜欢Writer
,因为我认为它使API更好。
答案 2 :(得分:0)
解决方案取决于写入数据的特定接口。例如,应该写同步还是异步?如何传达写入错误? ...作为异常或通过监听器回调机制?要写入的数据格式是什么(例如顺序文本数据)。
如果没有更多信息,就不可能为您提供更好的解决方案,但我要说的是,将数据写入多个位置的一个常见抽象是使用java.io类(InputStream
/ OutputStream
或Reader
/ Writer
)。
答案 3 :(得分:0)
我认为你要找的是外观模式。
实际上,InputStream / Reader / stdin和OutputStream / Writer / stdout就是这样。
答案 4 :(得分:0)
考虑输出数据所采用的形式,以及应用程序需要返回的响应对象,然后选择或创建满足这些要求的接口。
在最抽象的层面上,你会喷出一堆字节,所以OutputStream
肯定是“字节接收器”的正确接口。如果Writer
合适,则可以提高一级抽象,输出文本字符。如果您正在传递域对象,那么您可能需要更具体的东西。
但是我怀疑你的界面不需要比
复杂得多public interface Consumer<T>
{
public void consume(T obj);
}
可能带有返回类型,如果您的提供者关心那种事情(例如,记录处理的实体数量的int)。毫无疑问,开源项目中有很多接口符合类似的模式 - 毕竟,只有一个单一方法的界面中只有这么多的变化 - 但是没有什么可以让人想到的是“真正的一个版本”。这种模式。此外,它真的很容易理解,因为你不必担心实现,所以在大约60秒内自己滚动它几乎没有任何缺点。