2010-03-31 54 views
1

我寻求解决管理字符串资源的古老问题的解决方案。我目前的实施似乎运作良好,但它取决于使用单身人士,我知道多久单身人士可能会受到诽谤。管理Java应用程序中的字符串资源 - 单例?

资源管理器类有处理查找在ResourceBundle单一实例,并使用它像这样:

MessageResources mr = MessageResources.getMessageResources(); // returns singleton instance 
... 
JLabel helloLabel = new JLabel(mr.getString("label.hello")); 

这是一个适当使用一个单身的?有没有一些更好,更普遍使用的方法,我不知道?

我明白这可能有点主观,但任何反馈,我可以得到赞赏。我宁愿早点发现我做错了,而不是在以后的过程中。

谢谢!

+2

我不明白你用ResourceResource解决了哪些问题,ResourceBundle并没有提供开箱即用的功能? – ykaganovich 2010-03-31 05:27:25

+0

这主要是为了更好地封装bundle的加载等。我也有一些方便的方法来使用MessageFormat格式化消息等。 – 2010-04-01 05:00:13

回答

1

这对我来说似乎很好。使用单例并不是一件坏事,比如在这种情况下它提供对某些资源的访问。当你想修改单例的底层实现时,使用单例会成为一个问题,因为在大多数情况下,单例的访问与其实现有关。在你的例子中,你是否想过使用MessageResources类的不同实现?可能不会,因为它的工作很好。

3

当你拥有像你的MessageResources无处不在的东西,那么把它作为一个单身人士是可以原谅的。但是如果可以的话,你是正确的避免它们。

真正的问题是:这会导致你的问题?通常单身人士在单元测试中确实令人头疼。特别是如果你传入的是一个你宁愿存储在单元测试代码中的接口。 (你正在为接口编码,是不是;-)

我找到的最佳选择是dependency injection。您可以手动注入您的依赖关系,也可以使用像SpringGuice这样的框架。

我的猜测是你有一个单一的具体实现MessageResources,在单元测试的土地上正常工作。如果是这样,单身人士可能会很好。但是如果你发现自己编写的测试需要存根/模拟版本MessageResources,那么你会希望你走了一条不同的路。

相关问题