责任链模式简单实现

两种实现方式

第一种

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();
    }
相关推荐
天天摸鱼的java工程师3 分钟前
八年 Java 开发手敲:SpringBoot+SpringSecurity+JWT 实战,前后分离权限注解落地就能跑
java·后端
冰淇淋@5 分钟前
idea启动项目报错java: OutOfMemoryError: insufficient memory
java·ide·intellij-idea
techzhi7 分钟前
this view is read-only (IntelliJ IDEA)
java·ide·intellij-idea
编程学委8 分钟前
Idea(2023版)使用Svn
java·svn·intellij-idea
qianbailiulimeng9 分钟前
IDEA + Spring Boot 的三种热加载方案
java·后端
王元_SmallA9 分钟前
网卡驱动架构以及源码分析
java·后端
零基础的修炼18 分钟前
Linux---序列化与反序列化
java·开发语言
敲代码的嘎仔25 分钟前
JavaWeb零基础学习Day6——JDBC
java·开发语言·sql·学习·spring·单元测试·maven
闭着眼睛学算法26 分钟前
【双机位A卷】华为OD笔试之【排序】双机位A-银行插队【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·javascript·c++·python·算法·华为od
熙客36 分钟前
RabbitMQ:灵活路由和高可靠的消息队列
java·中间件·rabbitmq·java-rabbitmq