rec*_*ion 4 c++ message-queue listener
所以,我正在编写一个类的代码,这个类将进入一个将被其他人使用的库.该类将拦截并处理传入的消息(详细信息并不重要,但它使用的是activemq-cpp库).这个消费者类的概要是
class MessageConsumer {
...
public:
void runConsumer();
virtual void onMessage(const Message* message);
}
Run Code Online (Sandbox Code Playgroud)
其中,runConsumer()建立连接并开始监听和onMessage()接收消息时被调用.
我的问题是:使用此代码的人将各自拥有处理不同消息的方式.如何保持MessageConsumer通用但提供这种灵活性,同时保持代码简单?
两种选择:
MessageConsumer自己的新课onMessage()吗?MessageConsumer吗?您怎么看?哪个选项更好,为什么?
谢谢!
在一种方法中,允许客户端注册回调,然后MessageConsumer调用注册的回调.这类似于观察者/广播设计模式.
客户端必须继承并覆盖MessageConsumer的第二种方法类似于策略设计模式.
基本设计目标建议使用最弱的关系来促进松耦合.由于与简单关联相比,无关是一种更强的关系,所以其他所有方法都是相同的方法1.
来自赫伯的文章
"继承经常被过度使用,即使是经验丰富的开发人员.总是最小化耦合:如果类关系可以用多种方式表达,那么使用最实际的最弱关系.鉴于继承几乎是你用C++表达的最强关系(第二)只有友谊),只有在没有相同的弱势选择的情况下才真正合适."
但正如詹姆斯指出的那样,除非明确了解整体设计限制,否则很难发表评论.