Схема проектирования наблюдателя и др. - PullRequest
0 голосов
/ 27 июня 2010

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

Вот два моих вопроса: 1) Если я хочу, чтобы мой объект был и наблюдателем, и субъектом, это просто вопрос о том, чтобы заставить его наследовать как от наблюдателя, так и от класса субъекта? Скажем, у меня есть несколько подразделений в армии, и я хочу, чтобы они быстро отправляли друг другу локальные обновления. Работает ли я так, как я описал, или же нужен совершенно другой шаблон?

2) Если объект должен общаться со многими типами различной природы (скажем, генерал должен общаться со своими частями, с лидером фракции и т. Д.), Работает ли модель наблюдателя? Я думаю, это просто вопрос реализации, но я не знаю ...

Ответы [ 2 ]

2 голосов
/ 28 июня 2010

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

Конечно, вам решать, будет ли это лучше работать в вашем случае.

Кстати, отметьте форсированные сигналы как реализацию для вашего наблюдателя

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

1) Если я хочу, чтобы мой объект был и наблюдателем, и субъектом, это просто вопрос о том, чтобы заставить его наследовать и от наблюдателя, и от класса субъекта?.

2) Если объекту необходимо взаимодействовать с типами разных типов, работает ли шаблон наблюдателя?

Да.в случае, если вы переключаетесь на .NET / C #, есть хорошая библиотека для реагирования на / обработки событий из наблюдаемых: Rx http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx.

...