什么是处理机?
处理机为某个业务的处理单元,当回调时,根据消息类型执行不同的处理机,实现业务处理。
设计需求场景
1. 远程回调jms消息后,动态调用处理机列表(处理机为多个)
2.处理机分两种类型,一种是之前(在业务逻辑快之前调用),一种是之后(在业务逻辑快之后调用)
3.每个处理机都要有限制条件,即配置调用条件,如果满足配置的条件才被调用
设计思路
解决场景1
首先需要一个处理机List,一个处理机接口:
即List<IRemoteCallbackHandler> handlerList属性。
处理机接口需要一个执行方法execute
解决场景2
分两种类型的处理机,那就需要两种类型的处理机接口:
1.之前调用的处理机(BaseRemoteBeforeCallbackHandler)
2.之后调用的处理机(BaseRemoteAfterCallbackHandler)
解决场景3
考虑到代码的复用性,采用适配器模式,提出一个总的处理机抽象类,配置conditionMap属性和验证方法
1.Map<String,Object>conditionMap: 保存调用条件(如event=task-create)
2.Boolean validate(Map<String, Object> param):验证是否满足调用条件
综合设计思路
综合考虑使用场景和程序的扩展性和维护性,决定采用常用的适配器模式
类图如下:
时序图:
1.handle调用parseMsgToMap
2.遍历remoteCallbackHandlerList
3,.判断调用类型(type)
4.调用remoteCallbackHandler.validate(param),判断是否通过
5.如果通过,调用remoteCallbackHandler.execute(param);
/**
* 处理方法
* @param message 消息对象
* @param type 类型
*/
public void handle(MapMessage mapMessage,String type){
//将消息解析为map
Map<String,Object>param=this.parseMsgToMap(mapMessage);
//循环处理类集合
for(IRemoteCallbackHandler remoteCallbackHandler:remoteCallbackHandlerList){
//如果类型符合
if(type.equals(remoteCallbackHandler.type())){
//如果验证条件通过
if(remoteCallbackHandler.validate(param)){
//执行
remoteCallbackHandler.execute(param);
}
}
}
}