Каков наилучший способ уведомить другие компоненты об изменении в одном компоненте - PullRequest
0 голосов
/ 19 сентября 2019

У нас есть решение Visual C ++ 2013 (C ++ 11), в котором есть несколько компонентов.Я хотел бы уведомить другие компоненты в случае каких-либо изменений в любом компоненте.Не всегда каждый компонент должен знать каждое изменение.Я имею в виду, что

Допустим, у меня есть компоненты A, B, C и D

  • В компоненте A есть изменения. Компоненты B, C и Dнеобходимо знать об изменении в компоненте A.

  • Существует изменение в компоненте B. Компонентам A и C необходимо знать об изменении в компоненте B.

  • Произошло изменение в компоненте C. Компоненты A, B и D должны знать об изменении в компоненте B.
  • Произошло изменение в компоненте D. Никто не должен знать.

Для этого мы имеем в виду три идеи, и я хотел бы знать, какой может быть лучший путь, конечно, что-либо кроме этих трех идей более чем приветствуется.

Идея1:

  • Компоненты A, B, C и D имеют метод (функцию x), который можно вызвать, чтобы сообщить ему, что изменение произошло.Скажем, если произойдет изменение в компоненте A, A будет напрямую вызывать функцию x каждого из других компонентов, которые необходимо проинформировать.

Идея 2:

  • Компоненты A, B, C и D имеют метод (функцию x), который может быть вызван, чтобы сообщить ему, что изменение произошло.Каждый компонент публикует событие, когда в нем происходит изменение.Другие компоненты регистрируются в компонентах, только если они заинтересованы в них, чтобы получать сообщения об изменениях в зарегистрированном компоненте.Компонент после получения сообщения обрабатывает его, вызывая его метод x.

Идея 3:

  • Компоненты A, B, C и D имеют метод (функция x) который может быть вызван, чтобы сообщить ему, что произошли изменения.Каждый компонент публикует событие, когда в нем происходит изменение.Сообщение достигает всех компонентов, и получатель решает, нужно ли ему обработать сообщение на основе отправителя сообщения, и поэтому вызывает или не вызывает его метод x.

Факторы, которые мы рассматриваем вРешением являются

  • Производительность
  • Наименьшая сложность в реализации
  • Простота реализации

1 Ответ

0 голосов
/ 19 сентября 2019

Это звучит как случай использования шаблона проектирования наблюдателя.Обычно с этим шаблоном проектирования у вас есть два разных типа классов: Subject и Observer.Наблюдатель подпишется на изменение в Субъекте, поэтому, когда изменение произойдет в Субъекте, он будет уведомлен.

В вашем случае каждый компонент будет субъектом и наблюдателем.Компонент может зарегистрировать свою заинтересованность в другом компоненте.Передав указатель на себя другому компоненту, он может быть проинформирован о происходящем изменении, то есть будет вызвана его функция x.

Здесь приведены некоторые примеры использования шаблона наблюдателя в C ++: https://cpppatterns.com/patterns/observer.html
https://www.codeproject.com/Articles/328365/Understanding-and-Implementing-Observer-Pattern-2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...