情景
之前实现串行校验业务不能实现多分支串行
问题
它们采用的队列的方式,队列为全局共享,串行任务只能在单线程中实现,并且调用之前都要清空队列
解决
使用责任链模式,在调用业务前实现校验,不符合条件跳转处理分支,符合条件进入下一个校验
代码如下
/**
* 所有校验类都要继承此类,总体处理链上每个校验对象
*/
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;
}
}
网友评论