设计帮助 - 为不同类型的消息处理通用接口的设计模式



我必须为一个节点提供一个接口,该接口可以接收具有相同标头但不同消息类型的消息。消息类型始终位于标头中的固定位置。这些消息类型可以进一步分为两个分类 - Atype(一组 6 条消息(和 Btype(一组 8 条消息(。该设计需要提供支持,以便轻松地将新的消息类型(例如Ctype(添加到接口。我一直在考虑编写一个接口类,该接口类具有 std::map,message_type是 Atype 或 Btype,message_handler_type是对相应消息处理程序的函数调用(基于 AtypeMessage 和 BtypeMessage 的两个单例类( - AtypeMessage::get_instance((->AtypeMessageHandler(( 或 BtypeMessage::get_instance((->BtypeMessageHandler(( 并根据message_type将消息传递给相应的消息处理程序。该节点将接收大量流量。 对于未来的扩展来说,这是一个足够好的设计吗? 还有其他好的设计选项是我错过的吗?

您可以为消息创建基类:

class Message {
public:
virtual void do_something() = 0;
};
class MessageA : public Message {
public:
void do_something() override {
// ...
} 
};

并从基本消息继承所有其他消息(如示例中的 MessageA(。比您将能够像

void recieve_message(Message&) {
// ... 
};

它还提供了一个有用的扩展方法:您可以添加另一个派生自 Message 的类。

如果我误解了什么,我很抱歉:这个问题对我来说真的很混乱。

最新更新