如何使用Java Observer';s更新(可观察、对象)功能?
我有一个用Java创建的基本MVC模式,它使用Observable/Observer类/接口如何使用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,
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看看这个问题答案: