消息代理,具有不同的消息类型

时间:2012-07-19 08:40:59

标签: design-patterns cross-platform msmq

我正在寻找一种很好的方法来处理不同类型的字符串(跨平台)类型的消息。

想象一下下一个场景:

我们有一个方法:onMessageReceive(String message)
参数值:'order.new:1'或'orderstatus.update:12'等

现在我们可以通过分隔符':'

将信息拆分为'action'和'parameter'
String action = 'order.new'
String parameter = '1'

我们可以将其放在if-else语句中

if (message.equels("order.new") {
    // get the order

} else if (message.equels("orderstatus.update") {
    // get the new order status<br/>
}

但我不喜欢这样。如果只有2个动作则“ok”,但如果有50个动作则该怎么办。

其他解决方案是什么(跨平台)?

1 个答案:

答案 0 :(得分:0)

您可以使用单个方法

定义通用消息处理程序接口
  interface MessageHandler {
     void handleMessage(String parameter);
  }

然后,您可以拥有一个处理程序注册表,每种类型的消息都有一个处理程序。注册表可以有这样的界面:

  class HandlersRegistry {
      public MessageHandler getHandler(String handlerType);
      public void addHandler(String handlerType, MessageHandler handler);
  }

在内部,处理程序注册表可以存储将字符串(处理程序类型)映射到适当的MessageHandler对象的映射。这样就可以避免使用if-else或switch语句,并且可以轻松扩展代码以处理新类型的消息。