bag.addObserver () может быть выполнен только потому, что IntegerDataBag расширяет Observable?
Да, в этом весь смысл.
Где находится этот наблюдательбыть добавленным к?что создается и где?
Добавляет IntegerAdder
в список классов, которые наблюдают IntegerDatabag
за изменениями.С этого момента, если изменение произойдет в IntegerDataBag
, оно уведомит IntegerAdder
с помощью метода notifyObservers()
, который запустит его метод update()
.
В чем разница между setChanged() и notifyObservers ()?
notifyObservers()
вызывает метод update()
каждого наблюдателя вашей наблюдаемой и используется для передачи информации этому методу.Что касается setChanged()
, он помечает ваш объект как «измененный», так что метод hasChanged()
теперь возвращает true ... Он используется для отслеживания изменений в вашем наблюдаемом классе.
Я не понимаю метод обновления - что означает args?
Метод update()
унаследован от реализации интерфейса наблюдателя - его необходимо реализовать.Object arg
- это необязательный аргумент, который вы можете передать методу через notifyObservers()
.
Почему мне нужно проверить этот пакет o ==, зачем мне обновлять другой наблюдаемый?
Поскольку наблюдатель может «наблюдать» более чем одну «наблюдаемую», вам необходимо убедиться, что действительно IntegerDatabag
вызвало update()
, следовательно, o==bag
.
Зачем мне в любом случае нужен этот наблюдатель?
Вам нужен наблюдатель, чтобы отслеживать IntegerDataBag
на предмет изменений.В вашем случае вы печатаете сообщение в консоли при изменении IntegerDatabag
.Цель модели Observer / Observable - отслеживать изменения конкретных объектов, а затем обновлять программу на основе изменений.