2009-08-08 64 views
1

我正在一個項目中,我有很多類涉及我的GUI(主要是面板,但有時框架本身)。所以我在想,不是將框架作爲參數傳遞給每個構造函數,而是在每個類中創建getter,我將創建一個JFrame的單例實例,以便所有類都可以訪問它。這是一個好方法嗎?還是隻是以某種方式懲罰我的懶惰?在這種情況下,單身人士GUI會不錯嗎?

編輯:我不是懶惰的,我試圖在模型中考慮這個問題:例如,假設我有各種汽車對象,道路是我的GUI。所有汽車都應該可以進入同一條道路,而道路不屬於汽車的一部分。

+0

如果你想接口「正確'與Mac OS這不會工作。他們的HID準則指定有一個「新窗口」菜單選項。此外,還有一個Windows菜單,允許選擇所有打開的窗口。如果您嘗試將每個新窗口作爲新的java進程運行,您必須在obj-c中編寫windows菜單或使用rcp,因爲jvm無法在jvms之間輕鬆共享窗口引用(因此您無法調用toFront ()) – KitsuneYMG 2009-08-10 12:36:57

回答

1

更好的方法是將主JFrame隱藏在靜態方法後面,但通常情況下,如果整個程序只有一個JFrame對象使其靜態化,那麼這是一個好主意。

隱藏其背後的靜態方法可以確保,如果你在這方面努力與其他人可以約束你希望他們能夠在主JFrame的訪問內容,但將這樣的事情學校項目等

是無用
+0

這不是一個學校項目,它只是一些遊戲和我爲自己做的實驗。 – 2009-08-08 18:50:11

+1

然後我不認爲有一個靜態的JFrame對象有什麼問題。會阻止你必須傳遞指針。 – user142350 2009-08-08 19:20:05

2

該地區有很多意見,請參閱下面的參考資料。

我的感覺是,我們應該儘量避免單身人士,因爲「沒有像1這樣的數字」。

[這是根據我的理論得出的結論,「沒有這樣的數字2」。如果你有代碼,允許兩個東西,只有兩個東西,那麼你已經錯過了一招 - 有幾乎肯定會超過兩個,而不是解決如何應對「多」]

。 「沒有這樣的數字作爲一個參數」就是,當你認爲只有某種東西時,會有一些背景可能會有更多......並且通常只需要很少的額外工作就可以獲得更多。

看看你的例子......我有各種汽車對象,他們都可以訪問相同的道路?這聽起來像是一個現實世界的模型嗎?英國道路和法國道路有什麼不同? ;-)爲什麼要在你的代碼中建立「唯一的」假設?

使用工廠和依賴注入這些工廠往往是更好的答案。有關此question的答案的更多資料。

+0

呵呵,對不起這個糟糕的例子:)這並不是說我只是想限制這個實例,問題是我想要一個簡單的參考,讓所有的類都可以使用,並讓我的代碼看起來不錯。 我想積極參與,但我仍然缺乏積分,所以我要感謝迄今已回覆的所有人。 – 2009-08-08 20:28:28

+0

不僅僅是你的例子,它是如此驚人的東西,看起來像一個單身人士,然後結果不是一個。簡單的參考可以來自注射工廠。請參閱參考資料。 – djna 2009-08-08 22:16:44

2

Singleton模式今天被認爲是「反模式」。當你的汽車有一天需要與不同的道路一起使用時,問題就會變得明顯。

如果您決定單獨測試汽車,它會變得更加明顯。如果你不能提供道路模擬,你將如何測試它們?而且你不能,因爲他們通過一個單身人士提到他們的道路。

(顯然有一個變通方法由具有辛格爾頓時在「測試模式」返回MockRoad,但這只是意味着你要添加測試代碼到你的產品代碼。)