Допустим, есть интернет магазин. Есть товары, каждый пользователь может "следить за товаром", допустим за его скидкой. Берем в пример товар iPhone X 128 GB. Правильно ли я понимаю, что он является Subject, и каждый человек кто нажал "следить" за ним, он становится его Observerом, и при нажатии на эту кнопку "следить" - Subject iPhone X делает attach этого Observer (пользователя)? В случае, если я правильно понял, то где нам хранить этих обсерверов, в базе? Отдельная таблица продукта к его обсерверам? И потом когда в админке менеджер меняет цену данного товара, то мы делаем notify() сабджекта, (под капотом - выбираем из базы всех обсерверов этого продукта и делаем им нотификейт, например, отписываем, на почту о изменненой цене)
Вопрос: правильно ли я всё понял, или это делается вообще не так? В основном вопрос, где хранить всех обсерверов, очевидно же в базе?
У вас перепутано понимание абстрактного паттерна (один объект следит за изменениями в других) и схожой по смыслу бизнес-логики (покупатель следит за изменением цены)... Если вопрос по паттерну конечно
Да, в отдельной таблице будем держать ид товара, ид или э мейл того, кто следит, ну и другие служебные поля по необходимости.
Ну и, верно, нам нужны события смены, которые будут вызывать процесс оповещения после смены цен и т.п., по сути, действия после изменения объекта
Все верно. Observer - это наблюдатель. Он следит за чем-то и получает оперативные уведомления об изменении состояния субъекта. А как он получает уведомления и как это реализовано у Вас - это уже Ваше дело.