如何使用Java Observer';s更新(可观察、对象)功能?

如何使用Java Observer';s更新(可观察、对象)功能?,java,model-view-controller,Java,Model View Controller,我有一个用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,

我有一个用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);
这是一个函数,但我有许多不同类型的更新要在我的
视图中执行。我该如何优雅地区分(比如)搜索结果的更新或其他信息的显示?这是两个完全不同的更新,它们使用来自模型的不同对象

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

"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()。因此,我的问题是,当我有许多不同类型的更新或事件要处理时,如何正确使用
更新
功能?

您可以创建自己的
侦听器
界面,具体取决于您正在收听的视图/模型。这允许您的视图/模型准确地将所需信息传递给控制器,并使控制器的单元测试变得更容易


对于收听模型,更新所有内容是最简单的解决方案,您可以这样做,除非性能证明是一个问题。

是的,我认为最好使用监听器界面


检查一下这个注释

Observer/Observable模式的实现在java、syne JDK 1.0中非常古老。“现在使用参数化创建自定义实现更有用。@NKukhar请详述您对参数化的评论。@Thufir看看这个问题答案: