责任链实现串行业务校验

2019-02-25  本文已影响0人  杨殿生

情景
之前实现串行校验业务不能实现多分支串行
问题
它们采用的队列的方式,队列为全局共享,串行任务只能在单线程中实现,并且调用之前都要清空队列
解决
使用责任链模式,在调用业务前实现校验,不符合条件跳转处理分支,符合条件进入下一个校验

代码如下

/**
 * 所有校验类都要继承此类,总体处理链上每个校验对象
 */
public abstract class ProcessObject {
    private ProcessObject successor;

    public void setSuccessor(ProcessObject successor){
        this.successor = successor;
    }
    abstract protected boolean handleWork(Activity activity);

    public boolean handle(Activity activity){
        boolean flag = handleWork(activity);
        if (flag && successor != null){
            flag = successor.handle(activity);
        }
        return flag;
    }
}

检测串行是否可执行

/**
 * 校验登录
 */
public class CheckLogin extends ProcessObject{
    @Override
    protected boolean handleWork(Activity activity) {
        boolean flag = isLogin();
        if (!flag){
            //登录页面
        }
        //flag返回false检测失败,flag返回true检测成功进入下一个检测
        return flag;
    }
}

处理最后环节带有回调代码

/**
 * 处理带有回调类型
 */
public class ProcessCallback extends ProcessObject{

    public interface Callback{
        void call();
    }

    private Callback mCallback;

    public ProcessCallback(Callback callback){
        mCallback = callback;
    }

    @Override
    protected boolean handleWork(Activity activity) {
        if (mCallback != null){
            mCallback.call();
        }
        return true;
    }
}

上一篇 下一篇

猜你喜欢

热点阅读