如何使用Java Observer的更新(Observable,Object)函数?

我有一个用
Java创建的基本MVC模式,它使用Observable / Observer类/接口.

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);

这是一个功能,但我在视图中有许多不同类型的更新.如何优雅地区分对搜索结果的更新或显示其他信息?这是两个完全不同的更新,它们使用模型中的不同对象.

我的第一个想法是使用Object传递一个字符串,该字符串将描述所需的更新.

"UpdateResults" "DisplayAdditionalInformation" "AddQuestions"

但这似乎容易出错且难看.我的第二直觉是创建一个将作为Object传递的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().因此,我的问题是,当我要处理许多不同类型的更新或事件时,如何正确使用更新功能?

最佳答案 您可以根据要监听的视图/模型创建自己的监听器接口.这允许您的视图/模型准确传递控制器所需的信息,并且可以更容易地对控制器进行单元测试.

要听取模型,更新所有内容是最简单的解决方案,除非性能证明是一个问题,否则您可以这样做.

点赞