У меня есть базовый шаблон MVC, созданный на Java, который использует класс/интерфейс Observable/Observer.Как использовать функцию наблюдения Java Observer, Object?
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
, например. Как я могу элегантно различать обновление до, скажем, моих результатов поиска или отображения дополнительной информации? Это два совершенно разных обновления, в которых используются разные объекты из Модели.
Моя первая идея состояла в том, чтобы использовать объект для передачи строки, которая описывает, какое обновление требуется.
"UpdateResults" "DisplayAdditionalInformation" "AddQuestions"
но это кажется подверженным ошибкам и уродливым. Мой второй инстинкт должен был создать объектСобытия, который будет принят как объект, но тогда я должен постоянно спрашивать, какие 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
, когда у меня есть много разных типов обновлений или событий для обработки?
Реализации Observer/Наблюдаемая картина довольно старая в Java, Syne JDK 1.0. Теперь гораздо полезнее создать пользовательскую реализацию с использованием параметризации. – nkukhar
@NKukhar, пожалуйста, расширьте свой комментарий о параметризации. – Thufir
@Thufir взгляните на этот вопрос ответ: http://stackoverflow.com/questions/4283304/having-trouble-getting-the-observer-pattern-working – nkukhar