责任链模式

当一个web请求到达的时候,去执行逻辑1,得到结果1;再根据结果1,执行逻辑2,得到结果2,……依次执行,最后得到结果N,也就是最终结果。

而具体到这个软件产品中,将具体要执行的逻辑1,逻辑2,……逻辑n视为command,用一个命令链给它们穿起来。但是还需要提供每一个command执行之后的上下文context。而上述需求,适用org.apache.commons.chain,就能够完全实现。

public abstract  class EntryChain {

    protected EntryChain nextChain;

    public abstract void handleEntryItem(EntryItem item, EntryLog entryLog);

    public void setNextChain(EntryChain nextChain) {
        this.nextChain = nextChain;
    }
}
public class BaseChain extends EntryChain {

    private final Logger logger = LoggerFactory.getLogger(BaseChain.class);
    @Override
    public void handleEntryItem(EntryItem entryItem, EntryLog entryLog) {
        Integer entryState = entryItem.getEntryState();
        if(entryStateCheck(entryItem,entryLog)){
            //初始数据
            if(EntryState.getByType(entryState).equals(EntryState.Init)){
                nextChain.handleEntryItem(entryItem,entryLog);
            }
            //挂起数据
            else if(EntryState.getByType(entryState).equals(EntryState.Hunging)){
                nextChain.handleEntryItem(entryItem,entryLog);
            }
            //错误数据
            else if(EntryState.getByType(entryState).equals(EntryState.ErrorData)){
                if(checkExternalId(entryItem,entryLog)){
                    nextChain.handleEntryItem(entryItem,entryLog);
                }
            }
        }
    }
public class AcctChain extends EntryChain {
    @Override
    public void handleEntryItem(EntryItem entryItem, EntryLog entryLog) {
        HungState hungState = HungState.getByType(entryItem.getHungState());
        if(hungStateCheck(entryItem,entryLog)){
            nextChain.handleEntryItem(entryItem,entryLog);
        }
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容