В общем, вы должны обновить все из наблюдаемого, когда вы получите вызов update (). если это нецелесообразно, вы можете передать подсказку notifyObservers ().
банда говорит, что одно из следствий паттерна наблюдателя:
"Неожиданные обновления. Поскольку наблюдатели не знают о присутствии друг друга, они могут не учитывать конечную стоимость смены объекта. Казалось бы, безобидная операция над объектом может вызвать каскад обновлений для наблюдателей и их зависимых объектов. Кроме того, критерии зависимости, которые не определены или не поддерживаются, обычно приводят к ложным обновлениям, которые трудно отследить.
Эта проблема усугубляется тем фактом, что простой протокол обновления не предоставляет подробных сведений о том, что изменилось в теме. Без дополнительного протокола, помогающего наблюдателям обнаружить, что изменилось, они могут быть вынуждены усердно работать, чтобы вывести изменения.
"
также в стадии реализации, они говорят:
"Избегание специфичных для наблюдателя протоколов обновления: модели push и pull. При реализации шаблона Observer субъект часто передает дополнительную информацию об изменении. Субъект передает эту информацию в качестве аргумента для Update. Объем информации может изменяться широко.
В одном крайнем случае, который мы называем пуш-моделью, субъект посылает наблюдателям подробную информацию об изменениях, хотят они этого или нет. Другой крайностью является модель тяги; субъект отправляет только самое минимальное уведомление, и наблюдатели явно просят подробности после этого.
Модель вытягивания подчеркивает незнание субъектом своих наблюдателей, тогда как модель выталкивания предполагает, что субъекты знают кое-что о потребностях своих наблюдателей. Модель push может сделать наблюдателей менее пригодными для повторного использования, потому что классы Subject делают предположения о классах Observer, которые не всегда могут быть истинными. С другой стороны, модель извлечения может быть неэффективной, поскольку классы наблюдателей должны выяснить, что изменилось без помощи субъекта.
«