在我的场景中,我有组件 A 和组件 B,它们通过 Message 类进行通信。
我的消息类看起来像这样
class Message {
virtual void prepare();
virtual void parse();
virtual void handle();
};
任何消息都是 Message 类的子类,例如:
class MessageA: public Message {
void prepare() {
...
}
void parse() {
...
}
void handle() {
componentA->executeFunctionABC(); // componentA is a global pointer
}
};
组件 A 使用 MessageA 编译
组件 B 使用 MessageA 编译
所以说,当组件 A 想要向组件 B 发送消息时,它会实例化一个 MessageA 对象,prepare() 并将其发送出去。当组件 B 通过套接字接收到消息时,它会解析()它并处理()它。
我现在的问题在于 handle() 函数。只有消息的接收者会调用 handle() 函数。handle() 函数的实现需要执行某些例程,这些例程涉及接收组件中的函数。
我现在可以像这样使用 PREPROCESSOR 来解决这个问题:
void handle() {
#ifdef COMPILE_FOR_COMPONENT_A
componentA->executeFunctionABC();
#endif
}
但它看起来很丑。我想知道是否有任何设计模式可以正确地做到这一点?