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