责任链模式简单实现

两种实现方式

第一种

java 复制代码
public interface IBaseTask {
    public void doAction(String isTask,IBaseTask iBaseTask);
}
java 复制代码
public class ChainManager implements IBaseTask{
	//工作类的集合
    private List<IBaseTask> iBaseTaskList = new ArrayList<>();

    public void addTask(IBaseTask iBaseTask){
        iBaseTaskList.add(iBaseTask);
    }
	//下标
    private int index = 0;

    @Override
    public void doAction(String isTask, IBaseTask iBaseTask) {
        if(iBaseTaskList.isEmpty()){};
        if (index >= iBaseTaskList.size()){
            return;
        }
        //获取对应下标的任务对象
        IBaseTask baseTask = iBaseTaskList.get(index);

        index ++;
		//执行任务
        baseTask.doAction(isTask,iBaseTask);
    }
}

//创建三个责任链对象

java 复制代码
public class TaskOne implements IBaseTask{
    @Override
    public void doAction(String isTask, IBaseTask iBaseTask) {
        if ("1".equals(isTask)) {
            System.out.println("拦截器1处理了");
        }else{
            iBaseTask.doAction(isTask,iBaseTask);
        }
    }
}
java 复制代码
public class TaskTwo implements IBaseTask{
    @Override
    public void doAction(String isTask, IBaseTask iBaseTask) {
        if ("2".equals(isTask)) {
            System.out.println("拦截器2处理了");
        }else{
            iBaseTask.doAction(isTask,iBaseTask);
        }
    }
}
java 复制代码
public class TaskThree implements IBaseTask{
    @Override
    public void doAction(String isTask, IBaseTask iBaseTask) {
        if ("3".equals(isTask)) {
            System.out.println("拦截器3处理了");
        }else{
            iBaseTask.doAction(isTask,iBaseTask);
        }
    }
}

执行

java 复制代码
private void zerenlian1() {
        ChainManager chainManager = new ChainManager();
        chainManager.addTask(new TaskOne());
        chainManager.addTask(new TaskTwo());
        chainManager.addTask(new TaskThree());
        //从TaskOne开始执行不对的话就自动执行TaskTwo
        chainManager.doAction("2",chainManager);
        //返回结果 "拦截器2处理了"
    }

第二种

java 复制代码
public abstract class BaseTask {
    private boolean isTask;

    public BaseTask(boolean isTask) {
        this.isTask = isTask;
    }

    private BaseTask nextTask;
    public void addTask(BaseTask nextTask){
        this.nextTask = nextTask;
    }

    public abstract void doAction();

    public void action(){
        if(isTask){
            doAction();
        }else{
            if(nextTask != null){
                nextTask.action();
            }
        }
    }
}
java 复制代码
public class Task1 extends BaseTask{
    public Task1(boolean isTask) {
        super(isTask);
    }

    @Override
    public void doAction() {
        System.out.println("节点1已被执行");
    }
}
java 复制代码
    private void zerenlian() {
        Task1 task1 = new Task1(false);
        Task2 task2 = new Task2(false);
        Task3 task3 = new Task3(true);

        task1.addTask(task2);
        task2.addTask(task3);

        task1.action();
    }
相关推荐
百锦再8 小时前
React编程高级主题:测试代码
android·前端·javascript·react.js·前端框架·reactjs
JH30739 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
2501_916008899 小时前
全面介绍Fiddler、Wireshark、HttpWatch、SmartSniff和firebug抓包工具功能与使用
android·ios·小程序·https·uni-app·iphone·webview
Coder_Boy_10 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
玉梅小洋10 小时前
Windows 10 Android 构建配置指南
android·windows
invicinble10 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟11 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖11 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
Libraeking12 小时前
视觉篇:Canvas 自定义绘图与高级动画的华丽圆舞曲
android·经验分享·android jetpack
qq_124987075312 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计