Как выполнить различные операции в рамках обновления Наблюдателя () в Java?

Я только что начал играть с Observable, Observer и это update() метод и я не можем понять то, что должно я делать, когда различные действия звонят notifyObservers().

Я имею в виду, мой Observable класс имеет несколько различных методов тот вызов setChanged() и notifyObservers() в конце. В зависимости от вызываемого метода должна быть обновлена некоторая часть UI (Swing). Однако существует только один update() метод, реализованный в Observer класс.

Я, хотя из передачи чего-то к notifyObservers() метод и затем я могу проверить аргумент update() но не похоже на хороший способ сделать это. Даже если это сделало, что я должен передать? Строка с кратким описанием действия/метода? Интервал, как код действия/метода? Что-то еще?

Что лучший способ состоит в том, чтобы обработать эту ситуацию?

6
задан Ricardo Amaral 1 June 2010 в 02:22
поделиться

2 ответа

в общем, вы должны обновлять все из наблюдаемого, когда вы получаете вызов update (). если это нецелесообразно, вы можете передать подсказку notifyObservers ().

Книжная банда говорит, что одним из следствий паттерна наблюдателя является:

«Неожиданные обновления. Поскольку наблюдатели не знают о присутствии друг друга, они могут не знать окончательной стоимости смены предмета. На первый взгляд безобидная операция над объектом может вызвать каскад обновлений для наблюдателей и их зависимых объектов. Более того, критерии зависимости, которые не определены или не поддерживаются должным образом, обычно приводят к ложным обновлениям, которые трудно отследить.

Эта проблема усугубляется тем фактом, что простой протокол обновления не предоставляет подробностей о том, что изменилось в теме. Без дополнительного протокола, который помог бы наблюдателям обнаружить, что изменилось, они могут быть вынуждены усердно работать, чтобы вывести изменения. " также в процессе реализации они говорят:

«Избегание протоколов обновления, специфичных для наблюдателя: модели push и pull. Реализации паттерна Observer часто заставляют субъект транслировать дополнительную информацию об изменении.Субъект передает эту информацию в качестве аргумента в Update. Объем информации может сильно различаться.

В одном крайнем случае, который мы называем моделью выталкивания, субъект отправляет наблюдателям подробную информацию об изменении, хотят они этого или нет. Другая крайность - модель тяги; субъект не отправляет ничего, кроме минимального уведомления, и после этого наблюдатели явно запрашивают подробности.

Модель притяжения подчеркивает незнание субъектом своих наблюдателей, тогда как модель выталкивания предполагает, что субъекты что-то знают о потребностях своих наблюдателей. Модель push может сделать наблюдателей менее пригодными для повторного использования, потому что классы Subject делают предположения о классах Observer, которые не всегда могут быть верными. С другой стороны, модель pull может быть неэффективной, потому что классы Observer должны определять, что изменилось, без помощи Subject. "

8
ответ дан 9 December 2019 в 22:30
поделиться

Второй параметр для update () имеет тип Object , поэтому вы можете передать что угодно. Как вы заметили, подход довольно общий. Напротив, класс, который поддерживает EventListenerList , может получить определенную степень безопасности типов во время выполнения при использовании, как указано.

3
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: