2012-06-05 50 views
4

我有一個使用Observable/Observer類/接口的Java創建的基本MVC模式。如何使用Java Observer的更新(Observable,Object)函數?

Observable Observer  Observable/Observer 
Model   Controller View 

View triggers an event to the Controller, when the user interacts with the GUI. 
- E.g presses a button, fills in a field, etc. 

Model triggers an event to the View when it updates its state. 
- E.g when the a button was pressed and the Controller requests new results. 

我的問題是關於觀察員功能

update(Observable obs, Object arg); 

這是一個功能,但我有許多不同種類的更新在我View例如做的。如何優雅地區分我的搜索結果更新或顯示更多信息?這是兩個完全不同的更新,它們使用模型中的不同對象。

我的第一個想法是使用Object傳遞一個字符串來描述需要什麼更新。

"UpdateResults" "DisplayAdditionalInformation" "AddQuestions" 

但這似乎很容易出錯和醜陋。我的第二反應是創造條件,作爲一個對象傳遞一個的EventObject,但我必須不斷地問我用什麼樣的EventObject的:

if (arg instanceof ResultEventObject) 
    // Get results from model 
else if (arg instanceof InformationEventObject) 
    // Get information from model 
else if (arg instanceof QuestionsEventObject) 
    // get questions from model 

我的第三個想法是簡單地更新了一切,但似乎毫無意義的低效率。

我可能沒有正確理解Observable/Observer接口,或者我沒有使用update(),因爲它的作者是有意的。因此,我的問題是,當我有很多不同類型的更新或事件要處理時,如何正確使用update函數?

+2

實施/可觀察模式是在Java中很老,情誼,JDK 1.0。現在使用參數化創建自定義實現更加有用。 – nkukhar

+0

@NKukhar請擴展您的評論關於paramterization。 – Thufir

+0

@Thufir看看這個問題答案:http://stackoverflow.com/questions/4283304/having-trouble-getting-the-observer-pattern-working – nkukhar

回答

1

根據您正在收聽的視圖/模型,您可以創建自己的Listener接口。這使得您的視圖/模型可以準確地傳遞控制器所需的信息,並且可以更輕鬆地對控制器進行單元測試。

對於聆聽模型,更新所有內容是最簡單的解決方案,您可以這樣做,除非性能證明是一個問題。

相關問題