java - 如何使用 Java Observer 的 update(Observable, Object) 函数?

标签 java model-view-controller

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

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 接口(interface),或者我没有按照作者的意图使用 update()。因此我的问题是,当我有许多不同类型的更新或事件要处理时,如何正确使用 update 函数?

最佳答案

您可以根据正在收听的 View /模型创建自己的Listener 接口(interface)。这允许您的 View /模型准确地将所需的信息传递给您的 Controller ,并使对 Controller 进行单元测试变得更加容易。

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

关于java - 如何使用 Java Observer 的 update(Observable, Object) 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10897928/

相关文章:

java - 将 oneToMany 与可连接但一起使用,将其映射到子实体

java - 在文件的每一行中查找有效模式

java - JADclipse 可以在 MacOS 上运行吗?

java - 如何在不在服务器端存储文件的情况下向浏览器提供 PDF?

ios - 是否有必要将 UITabBarController 委托(delegate)给 AppDelegate

Java从字符串数组中随机生成字符串值

ios - 在 View Controller 之间传递数据

java - 使用 JPA 和 Java 更新查询

java - 什么是有用的抽象/契约来协助 Builder 模式构建 MVC UI?

java - 如何改变图形的大小