如何使用Java Observer的更新(可观察到,对象)功能?(How to Use Java O

2019-09-17 19:18发布

我有一个使用可观察/观察员类/接口在Java中创建了一个基本的MVC模式。

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的例子。 如何优雅地更新,比方说,我的搜索结果或其他信息显示区分? 这些是使用不同的对象从模型两个完全不同的更新。

我的第一个想法是使用对象来传递这将说明需要什么更新的字符串。

"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

我的第三个想法是简单地更新了一切,但似乎毫无意义的低效。

我可能不正确地理解可观测/ Observer接口或者我没有使用更新(),因为它意在通过它的作者。 所以我的问题,我该如何使用update功能正常时,我有很多不同类型的更新或事件来处理的?

Answer 1:

你可以创建自己的Listener根据什么的视图/模型你正在收听的接口。 这使您的视图/模型传递需要你的控制器准确的信息,并使其更容易单元测试控制器。

对于听模式,更新一切是最简单的解决方案,你可以这样做,除非性能被证明是一个问题。



Answer 2:

是的,我认为它能够更好地使用监听器接口

检查本说明http://www.softcoded.com/web_design/java_listeners.php



文章来源: How to Use Java Observer's update(Observable, Object) Function?