2012-09-03 32 views
2

短缺問題一個監聽器instace對所有組件或每個組件

我想知道是否有大約寫一個偵聽instace所有組件或每個組件實例的任何良好做法推薦一個實例。

擴展問題

我正在開發一個Java Swing應用程序。

在相同的形式,我可以有十幾個組件(他們之間沒有關係),使用相同的偵聽器類。我把每個聽衆寫在他們自己的班級裏。

監聽器用於對引入組件的數據進行一些驗證。

我應該爲每個組件創建一個偵聽器類的實例,還是應該爲所有組件使用同一個偵聽器實例?

我找不到任何關於此的良好實踐建議,除了this comment,沒有指出任何參考。

回答

3

對於ActionListener的特定情況,使用Action封裝所需的功能。整個Swing的這個類的廣泛use表明它的價值。這個簡單的example演示了一些內置的文本組件操作;這個更詳細的example顯示瞭如何在菜單和工具欄之間共享操作。

另一種方法是基於事件源的不斷增長和難以維護的if-then-else梯子。

附錄:啊,我誤解了你的問題。 @ Andrew's comment約爲;你的問題詢問實例。對於前者,單個聽衆傾向於向known anti-pattern演變;引用的早期版本example說明了這個問題。對於後者,只能按需要使用盡可能多的實例;我通常通過探查器在旅途中發現最嚴重的違規行爲。

+0

+1。這不是我正在尋找的答案,但我不知道「行動」,似乎很有趣。謝謝 –

+0

@FranciscoPuga:謝謝;我已經詳細闡述過了。 – trashgod

1

你應該選擇一個讓你的代碼易讀和可維護的代碼。

如果創建實例使得它更簡單,繼續前進,但由於行爲保持不變;我相信單一實例應該有效。

2

我認爲最好的解決方案是讓您的代碼儘可能最乾淨。

基本上,如果有一個單獨的實例不會使代碼過多複雜化,那麼您只能創建一個實例並在整個組件中共享它。否則,你可以有多個實例。

1

你的想法是非常有趣的........

Moveover如果搖擺....那麼它已經根據MVC架構......

Model-業務邏輯和數據

View-輸出的表示

Controller-行動完成。

現在我認爲它也有更好的Business Logic with its data together,所以我們可以很容易地關聯邏輯和它的相應數據。

你總是可以有一個共同的聽衆常見的EventSource,像JButton ...

你可以有4 JButton,這做不同的作品,現在你可以有一個單一的與ActionListenerswitch報表.....很容易處理......

相關問題