多种消息发送机制,处理合适不??

11-03-29 psw1254
    

最近在项目中我负责一个消息发送模块的编写,现在回过头来看看自己写的,不知道使用的设计模式是否合适。

项目中:发送消息包括几种方式:email,短信,信息推送(信息推送有两种不同的实现,都需要去实现,一种是基于IBM的Mqtt进行消息推送,还有一种是C2DM)。该模块在系统主要是将信息用这几种方式发送信息。

我想,不管用那种方式发送信息,这是发送信息的不同策略而已,我通过判断是需要发送消息的类型来产生不同的实现类,调用实现类的统一接口发送信息。UML图如下:(画的不是很好。)

其中代码实现:

SendMessageContext:

public class SendMessageContext {
	
	private SendMessageSuper sendMessageSuper;
	public SendMessageContext(Message message) {
		if("Mqtt" == message.getMessageType()) {
			sendMessageSuper = new MqttPush();
		} else if("Email" == message.getMessageType()) {
			System.out.println("email");
		} else if("SMS" == message.getMessageType()) {
			System.out.println("SMS");
		} else if("C2DM" == message.getMessageType()) {
			System.out.println("C2DM");
		} else {
			//记录 日志 log
			System.out.println();
		}
	}
	
	public SendMessageSuper getSendMethod() {
		return sendMessageSuper;
	}
}
<p>

SendMessageSuper:

public interface SendMessageSuper {
	public String sendMessage(Message message);
}
<p>

mqttpush:

public class MqttPush implements SendMessageSuper{

	@Override
	public String sendMessage(Message message) {
		
		MQTTConnection mqttConnection = MQTTConnection.getMQTTConnection();
		try {
			mqttConnection.publishToTopic("1111","1223SS423423");
		} catch (MqttException e) {
			e.printStackTrace();
		}
		// TODO Auto-generated method stub
		return null;
	}
}
<p>

不知道 这样使用 是否符合,有什么不足。

    

banq
2011-03-30 08:46

先把每种消息封装成对象,配置在配置文件中,用工厂把把每种消息创建封装,用反射装入配置中具体消息类。

psw1254
2011-03-30 14:34

恩!知道了!同样也可以用spring的IOC来注入了!