我有一个用
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);
这是一个功能,但我在视图中有许多不同类型的更新.如何优雅地区分对搜索结果的更新或显示其他信息?这是两个完全不同的更新,它们使用模型中的不同对象.
我的第一个想法是使用Object传递一个字符串,该字符串将描述所需的更新.
"UpdateResults" "DisplayAdditionalInformation" "AddQuestions"
但这似乎容易出错且难看.我的第二直觉是创建一个将作为Object传递的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().因此,我的问题是,当我要处理许多不同类型的更新或事件时,如何正确使用更新功能?
最佳答案 您可以根据要监听的视图/模型创建自己的监听器接口.这允许您的视图/模型准确传递控制器所需的信息,并且可以更容易地对控制器进行单元测试.
要听取模型,更新所有内容是最简单的解决方案,除非性能证明是一个问题,否则您可以这样做.