因此,我正在为将要进入其他人使用的库的类编写代码。此类将拦截和处理传入的消息(详细信息并不重要,但它使用的是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指出的那样,除非明确了解总体设计约束,否则很难发表评论。

    08-26 07:17