【设计模式】ActiveMQ中抽象工厂模式:ActiveMQ可以被抽象为工厂,用于创建消息对象

在ActiveMQ中使用了抽象工厂模式来创建不同类型的消息对象。

具体来说:

ActiveMQ提供多种消息对象

  • TextMessage 表示文本消息
  • BytesMessage 表示字节消息
  • StreamMessage 表示数据流消息
  • MapMessage 表示属性列表消息
  • ObjectMessage 表示对象序列化消息
    -etc

消息工厂接口

ActiveMQ定义了MessageFactory接口:

public interface MessageFactory {

  TextMessage createTextMessage();

  BytesMessage createBytesMessage();  

  MapMessage createMapMessage();

   // ..其他消息类型   
}

具体工厂

提供ActiveMQMessageFactory实现:

public class ActiveMQMessageFactory implements MessageFactory{

  public TextMessage createTextMessage() {
    return new ActiveMQTextMessage();
  }

  public BytesMessage createBytesMessage() {
   return new ActiveMQBytesMessage();  
  }

  //...
}

获取消息工厂

MessageFactory factory = new ActiveMQMessageFactory();

TextMessage textMessage = factory.createTextMessage();
BytesMessage bytesMessage = factory.createBytesMessage();

使用消息对象

使用具体的消息类型进行操作:

textMessage.setText("message text");
bytesMessage.writeByte(1);  

优点

ActiveMQ使用工厂模式可以:

  • 屏蔽消息对象的具体创建细节
  • 统一通过工厂接口创建
  • 后期可以提供其他替代工厂

符合抽象工厂模式的定义:

  • 提供一个创建一系列相关对象的接口
  • 而不必指定他们的具体类。

总的来说,ActiveMQ通过消息工厂与具体工厂实现,抽象化了消息对象的创建。