Я хочу, чтобы MessageSender поддерживал метод отправки для различных типов и удовлетворял следующим условиям.
условие A) «Отправить сообщение типа XXX» может быть добавлено позже (= легко развернуть)
условие B) каждый sendXTypeMessage вызывается в другом потоке (= каждый метод должен был быть независимым от потока)
Сначала я думал о следующем:
class MessageSender
{
public:
sendATypeMessage(ATypeData)
sendBTypeMessage(BTypeData)
sendCTypeMessage(CTypeData)
...(it can be added other type later)
}
Но в случае этого, когда я хочу добавить sendDTypeMessage (данные). Я должен изменить класс MessageSender.
секунду, когда я думал следующее:
class XTypeData : public IMessage
{
...
}
class MessageSender
{
public:
sendMessage(const IMessage& data);
}
MessageSender::sendMessage(const IMessage& data)
{
1) mutex lock
2) switch(check message type)
3) do something...
}
, но в этом случае я должен использовать блокировку мьютекса в sendMessage.
тогда это может вызвать проблемы с производительностью, потому что каждый поток отправителя сообщения может быть заблокирован в sendMessage.
Есть ли какое-либо хорошее решение для удовлетворения этих условий?