因此,我正在为将要进入其他人使用的库的类编写代码。此类将拦截和处理传入的消息(详细信息并不重要,但它使用的是activemq-cpp库)。此消费者类别的概述是
class MessageConsumer {
...
public:
void runConsumer();
virtual void onMessage(const Message* message);
}
其中
runConsumer()
建立连接并开始监听,并在收到消息时调用onMessage()
。我的问题是:使用此代码的人将各自拥有处理不同消息的方式。如何保持
MessageConsumer
通用,但又提供这种灵活性,同时保持其代码简单?两种选择:
MessageConsumer
继承一个新类并编写自己的onMessage()
吗? MessageConsumer
? 您如何看待,哪个选择更好,为什么?
谢谢!
最佳答案
在一种方法中,允许客户端注册回调,然后MessageConsumer调用注册的回调。这有点像观察者/广播设计模式。
第二种方法是客户必须继承和覆盖MessageConsumer,这类似于“策略”设计模式。
基本设计目标建议使用最弱的关系来促进松散耦合。由于与简单关联相比,继承是更强的关系,因此其他所有相同的方法1都是可取的。
从Herb's article
但是正如James指出的那样,除非明确了解总体设计约束,否则很难发表评论。