最近在项目中我负责一个消息发送模块的编写,现在回过头来看看自己写的,不知道使用的设计模式是否合适。
项目中:发送消息包括几种方式: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; } }
|
SendMessageSuper:
public interface SendMessageSuper { public String sendMessage(Message message); }
|
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; } }
|
不知道 这样使用 是否符合,有什么不足。