4

我有一个用 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);

这是一个功能,但例如,我有许多不同类型的更新要做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因此我的问题是,当我有许多不同类型的更新或事件要处理时,如何正确使用该功能?

4

2 回答 2

1

Listener您可以根据您正在收听的视图/模型创建自己的界面。这允许您的视图/模型准确地将所需的信息传递给您的控制器,并使对控制器进行单元测试变得更加容易。

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

于 2012-06-05T13:17:55.053 回答
1

是的,我认为最好使用监听器接口

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

于 2012-06-05T16:33:02.073 回答