美文网首页
责任链实现串行业务校验

责任链实现串行业务校验

作者: 杨殿生 | 来源:发表于2019-02-25 11:18 被阅读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;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:责任链实现串行业务校验

          本文链接:https://www.haomeiwen.com/subject/xquwyqtx.html