Давайте посмотрим, как популярный шаблон проектирования Observer (публикация / подписка) может быть реализован на C ++ самым простым способом. Здесь я использую пример метеостанции, чтобы объяснить шаблон наблюдателя, когда при изменении температуры, влажности и давления метеостанции все ее клиенты будут немедленно уведомлены.
Сначала давайте посмотрим на определение паттерна наблюдателя.
Шаблон наблюдателя определяет зависимость между объектами "один-ко-многим", так что, когда один объект меняет состояние, все его иждивенцы уведомляются и обновляются автоматически.
Почему важен паттерн наблюдателя?
Вспомните пример метеостанции. У него может быть набор клиентов (например, веб-приложения, мобильные приложения). Каждый клиент должен знать, когда происходит изменение состояния метеостанции, иначе клиенты не смогут показать точные результаты в реальном времени. Паттерн Observer - решение для подобных ситуаций. В этом сценарии метеостанция может быть принята как издатель (тема), а каждый клиент может быть взят как подписчик (наблюдатель).
Дизайн (диаграмма классов)
** Посмотрите, как интерфейсы использовались для улучшения слабосвязанного дизайна.
Здесь важно то, что классу WeatherStation не нужно знать о клиенте. Все, что ему известно, это то, что Observer реализует интерфейс Observer и наоборот.
Теперь давайте реализуем это на C ++.
Я шаг за шагом проведу вас через реализацию, вы можете проверить полный исходный код, используя следующую ссылку на GitHub.
Просмотреть полный исходный код на GitHub
Ага! Готово, поехали на тест-драйв….
Вот основной класс, который вам нужно запустить для тест-драйва.
Выход
Увидимся с другим руководством.
Прокомментируйте, если у вас возникли проблемы.
Прощай