在ActiveMQ中,组合模式用于Message组合JMSMessage对象。
具体来说:
- JMSMessage是一个表示JMS消息的抽象类。
- ActiveMQ定义了不同类型的JMSMessage实现:
- ActiveMQTextMessage:实现TextMessage接口,存储和传递文本消息
- ActiveMQBytesMessage:实现BytesMessage接口,存储和传递字节消息
- …等不同类型的JMSMessage实现
- 当用户通过ActiveMQ API发送消息时,会创建一个具体的JMSMessage实现,如:
// 发送文本消息
TextMessage message = session.createTextMessage("hello");
producer.send(message);
- 这个TextMessage其实是ActiveMQTextMessage的实例,实现了JMS规范中的TextMessage接口
- ActiveMQTextMessage通过组合ActiveMQMessage来实现JMS规范中的TextMessage:
public class ActiveMQTextMessage extends ActiveMQMessage implements TextMessage {
private ActiveMQMessage message;
public ActiveMQTextMessage(ActiveMQMessage message) {
this.message = message;
}
// 实现TextMessage接口
public String getText() throws JMSException {
return message.getText();
}
// ...其他方法
}
ActiveMQMessage包含了通用的JMS消息功能,ActiveMQTextMessage通过组合ActiveMQMessage来提供针对文本消息的特殊功能。
所以说,ActiveMQ中采用组合模式,将更具体的ActiveMQTextMessage组合到更通用的ActiveMQMessage中。
这种组合关系符合”使用组合优于继承”的基本原则。
ActiveMQ中其他类型的JMSMessage也是采用类似的组合关系,来实现指定类型的消息功能。