#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
Комментарии:
1. Существует также библиотека Boost, которая называется Boost. Signals2, который реализует шаблон наблюдателя: boost.org/doc/libs/1_47_0/doc/html/signals2.html Signals2 позволяет вам присоединять вызываемые прослушиватели к сигналу, который вы можете назначить издателем триггера события, и он вызовет всех прослушивателей. Это простой шаблон, но Signals2 имеет встроенную потокобезопасность, а также некоторые другие полезные функции, такие как агрегирование возвращаемых значений вызываемых объектов прослушивателя.
2. Проверьте активные объекты