Отправка сообщения между 2 объектами

#c #oop

#c #ооп

Вопрос:

У меня есть объекты A и B, которым необходимо отправлять и получать сообщения друг от друга.

Например:

Я нажимаю, это заставляет A отправлять сообщение B. B что-то делает с ним, а затем отправляет другое сообщение в качестве ответа.

Прямо сейчас, как у меня есть, у A есть B *, а у B есть A *, и они вызывают метод sendMessageTo друг друга для связи.

Есть ли лучший способ сделать что-то подобное?

По сути, сервер отправляет сообщение или локальная игра отправляет сообщение, которое принимает полиморфный посредник. Посредник получает сообщение либо с сервера, либо с локальной игры. Посредник передает его клиенту, который делает с ним все, что угодно. Идея заключается в том, что посредник не должен выполнять логику для клиента, следовательно, передавать сообщения.

Комментарии:

1. Зачем беспокоиться SendMessage ? Почему бы просто не вызывать методы непосредственно на объекте? Является ли это многопоточным? Помните, что все в одном потоке будет выполняться последовательно.

2. B является посредником для абстрактной сети (одиночная игра с ботами против многопользовательской игры с людьми)

Ответ №1:

Я думаю, вам нужно реализовать шаблон слушателя / наблюдателя. из Википедии:

Шаблон наблюдателя (подмножество шаблона публикации / подписки) — это шаблон проектирования программного обеспечения, в котором объект, называемый субъектом, поддерживает список своих зависимых, называемых наблюдателями, и автоматически уведомляет их о любых изменениях состояния, обычно путем вызова одного из их методов. В основном используется для реализации распределенных систем обработки событий.

Для получения дополнительной информации см.:

http://en.wikipedia.org/wiki/Observer_pattern

http://www.codeproject.com/KB/cpp/CppEvents.aspx

http://www.codeproject.com/KB/architecture/observer.aspx

Комментарии:

1. Существует также библиотека Boost, которая называется Boost. Signals2, который реализует шаблон наблюдателя: boost.org/doc/libs/1_47_0/doc/html/signals2.html Signals2 позволяет вам присоединять вызываемые прослушиватели к сигналу, который вы можете назначить издателем триггера события, и он вызовет всех прослушивателей. Это простой шаблон, но Signals2 имеет встроенную потокобезопасность, а также некоторые другие полезные функции, такие как агрегирование возвращаемых значений вызываемых объектов прослушивателя.

2. Проверьте активные объекты