当前位置:编程学习 > C/C++ >>

消息模式

最近看到一个应用,虽然代码量不大,但设计却很新颖,有种麻雀虽小,五脏俱全的感觉,在这跟大家分享下
 
 
 
 
先看下大致结构:
 
\
 
 
其中
 
1. AsyncWorker:抽象的业务接口,提供了doWork方法,具体的业务处理逻辑由子类来封装
 
 
2. AbstractNapoliWorker<T>:总控制器
 
a) 定义泛型,由子类来控制解析出来的消息类型,自由灵活。
 
b)对doWork方法初步实现,引入了一些控制逻辑
 
 
 
[html] view plaincopyprint?
public boolean doWork(Serializable msg) {  
  
        // 1. 解析消息  
        T destMessageBean = parseMessage(msg);  
        // 2. 消息过滤  
        if (filterMessage(destMessageBean)) {  
            // 3. 业务处理  
            doBiz(destMessageBean);  
        }  
  
        return true;  
    }  
 
public boolean doWork(Serializable msg) {
 
        // 1. 解析消息
        T destMessageBean = parseMessage(msg);
        // 2. 消息过滤
        if (filterMessage(destMessageBean)) {
            // 3. 业务处理
            doBiz(destMessageBean);
        }
 
        return true;
    }
注:代码示例中的filterMessage方法、doBiz方法都是空实现的,只是为保证基本流程的通畅性。具体的业务逻辑由子类来实现 
 
3. MailSendWorker:子控制器
 
a)传输具体的泛型模板
 
b)对filterMessage方法、doBiz方法具体实现
 
4.  MailProcessMessage:原子执行器。有针对性的处理不同的业务(N种不同流程)
 
 
 
 
总结:结构还是比较清晰的,不同的业务也可以交给不同的原子执行器处理,互不干扰,日后如果有新的流程接入,也可以快速接入,但是也有点小不足。
 
 
 
 
 
[html]  
protected T parseMessage(Serializable msg) {  
       if (msg == null) {  
           return null;  
       }  
  
       if (msg instanceof String) {  
          //业务处理  
       return ...;  
       }   
       return null;  
   }  
 
 protected T parseMessage(Serializable msg) {
        if (msg == null) {
            return null;
        }
 
        if (msg instanceof String) {
           //业务处理
  return ...;
        } 
        return null;
    }
 
 
 
parseMessage方法,控制的过死,每一种类型(如:String)只能按一种方式来解析,不灵活,如果入参再增加一个类型参数,用于控制msg采用何种方式来解析,也许会更好些。
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,