Вторая версия вообще не является наблюдателем. Это просто опрос.
Что на самом деле описала книга «Шаблоны проектирования» и что вы, возможно, имели в виду, это:
- Всякий раз, когда субъект изменяется, измененные значения передаются наблюдателю (в качестве аргументов для вызова notify).
- Всякий раз, когда субъект изменяется, наблюдатель извлекает новое состояние из субъекта по мере необходимости (без аргументов для вызова 'notify').
Вариант использования для второго подхода:
Субъект представляет собой набор записей адресной книги. Всякий раз, когда адресная книга обновляется, наблюдатели должны быть уведомлены. Тем не менее, объем измененных данных может быть довольно большим, и не каждому наблюдателю нужны все данные Таким образом, вместо того, чтобы выдвигать все данные, вы просто уведомляете всех наблюдателей (возможно, передавая указатель «this» субъекта в качестве аргумента в случае, если наблюдатели должны иметь возможность прослушивать сразу несколько объектов), а затем предоставляете новое состояние через геттеры. - таким образом, каждый наблюдатель может получить только ту информацию, которая ему нужна. Как и наблюдатель, который обновляет поле «Количество адресов» в вашем графическом интерфейсе - его не интересуют реальные имена, просто количество элементов.