2010-03-31 41 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,那麼你會希望你走了一條不同的路。

相關問題