2013-05-11 184 views
2

我正在用Java編寫遊戲。它是不好的做法,有像Java「全局」對象

public class Constants 
{ 
    public static Mouse mouse; 
    public static Keyboard keyboard; 
} 

的事情(鼠標和鍵盤是返回輸入對象)

或者這將是preferrable有一個與這些領域對象,傳遞給需要它們的對象?

謝謝。

回答

3

A singleton pattern就是你所追求的。

要特別注意The solution of Bill Pugh部分 - 這是一個非常乾淨的實現線程安全的惰性初始化單例,它利用java語言規範使線程安全。

單體模式現在通常會被忽略,因爲它使單元測試幾乎不可能。通常這現在通過依賴注入框架完成,如GuiceSpring

根據您運行應用程序的位置,通常存在某種可存儲單例的「上下文」 - 例如,Web應用程序中的ServletContext。這給你兩全其美。

0

它通常更好地把它們放到一個對象中,或者至少爲它們提供getter和setter。原因是當你直接從多個線程訪問一個對象時(這種情況在圖形和界面上發生很多事情),你經常會碰到併發問題。所以除非你知道你正在訪問的對象是線程安全的,否則它更好地以邏輯方式處理併發。

0

你應該沒問題。請記住,如果您想要從外部源修改Constants類中的對象,則必須將常量聲明爲靜態。但是,確保對象的位置是線程安全的。很多人可能會在這裏發表花哨的條款,但你有什麼應該沒問題。

0

您還可以熟悉Singleton設計模式。四人幫着名的設計模式是常見編程問題的普遍讚賞的解決方案。 在維基百科或Google上查找。