讯息模式

消息模式

最近看到一个应用,虽然代码量不大,但设计却很新颖,有种麻雀虽小,五脏俱全的感觉,在这跟大家分享下


先看下大致结构:

讯息模式

其中

1. AsyncWorker:抽象的业务接口,提供了doWork方法,具体的业务处理逻辑由子类来封装

2. AbstractNapoliWorker<T>:总控制器

a) 定义泛型,由子类来控制解析出来的消息类型,*灵活。

b)对doWork方法初步实现,引入了一些控制逻辑

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种不同流程)


总结:结构还是比较清晰的,不同的业务也可以交给不同的原子执行器处理,互不干扰,日后如果有新的流程接入,也可以快速接入,但是也有点小不足。


 protected T parseMessage(Serializable msg) {
        if (msg == null) {
            return null;
        }

        if (msg instanceof String) {
           //业务处理
		   return ...;
        } 
        return null;
    }

parseMessage方法,控制的过死,每一种类型(如:String)只能按一种方式来解析,不灵活,如果入参再增加一个类型参数,用于控制msg采用何种方式来解析,也许会更好些。