Схема наблюдателя с одним наблюдателем и многими субъектами - PullRequest
1 голос
/ 27 июля 2010

Я хочу реализовать шаблон наблюдателя и хочу, чтобы класс X наблюдал обновления в классах A и B.

X является производным от абстрактного базового класса XObs, который имеет функцию update (), принимающую перечисление в качестве параметра того, что произошло.

Логическая проблема здесь в том, что X должен знать, кто из A и B отправил обновление, а X не может определить это по параметру enum.

Каковы плюсы / минусы добавления еще одного параметра для update (), который сообщает, кто из A и B отправил обновление? Какие еще способы можно решить это? (Я скорее не создаю базовый класс для A и B и отправляю указатель this в update (), поскольку A и B совершенно разные.)

Спасибо

Tomas

Ответы [ 2 ]

1 голос
/ 27 июля 2010

Общий базовый класс для a и b не должен иметь какой-либо отдельной функциональности - его просто нужно использовать для выражения того факта, что A и B являются наблюдаемыми. В этом смысле А и В не совсем разные, они одинаковые.

0 голосов
/ 27 июля 2010

Я вижу следующие варианты:

  • заставляет и A, и B реализовывать общий базовый класс Observable (и передавать их в качестве параметров update() - проблема в том, что вам нужно уменьшить значение update(), чтобы определить, является ли параметр A или B, что делает раствор хрупкий
  • добавить какой-либо параметр типа флага в update() - это довольно похоже на предыдущий, только менее объектно-ориентированный
  • шаблонизирует реализацию Observer / Observable - я не до конца решил это (и у меня нет C ++ IDE, чтобы это проверить), но я считаю, что таким образом вы можете иметь две перегрузки update() с разными (A и B) типами параметров, таким образом, обработка разделена и проста, так что это мой предпочтительный вариант
...