责任链模式(Chain Of Responsibility)

123 阅读1分钟

攻略大全

1. 粘贴攻略

2. 造火箭攻略

3. 拧螺丝攻略

3.1 责任链管理类

/**
 * @author Renzituo
 * time: 2022/2/14 22:34
 * desc: 责任链管理类
 */
public class ChainManager implements IBaseTask{
    /**
     * 存储责任处理对象
     */
    List<IBaseTask> taskList = new ArrayList<>();

    /**
     * 索引
     */
    private int index;

    /**
     * 添加责任处理对象
     * @param iBaseTask
     */
    public void addTask(IBaseTask iBaseTask){
        taskList.add(iBaseTask);
    }

    /**
     * 尝试从集合中取出一个责任处理对象,交由其进行处理
     * @param isTask
     * @param iBaseTask
     */
    @Override
    public void doAction(String isTask, IBaseTask iBaseTask) {
        IBaseTask current = taskList.get(index);
        index++;
        current.doAction(isTask,iBaseTask);
    }
}

3.2 责任处理类

/**
 * @author Renzituo
 * time: 2022/2/14 22:43
 * desc: 责任处理
 */
public class MouthTask implements IBaseTask{
    private static final String TAG = "MouthTask";
    @Override
    public void doAction(String isTask, IBaseTask iBaseTask) {
        // 尝试进行拦截处理
        if (TAG.equals(isTask)){
            // 责任符合,开始处理
            System.out.println(TAG);
        }else {
            // 如果不能处理
            // 注意,此时传入的iBaseTask是责任链管理对象
            // 即此时调用的将是责任链管理对象的doAction()
            // 而责任链管理对象的doAction()则是尝试取出下一个责任拦截对象去处理该任务
            // 责任链思想的精髓就在于此
            iBaseTask.doAction(isTask,iBaseTask);
        }
    }
}
/**
 * @author Renzituo
 * time: 2022/2/14 22:40
 * desc: xxx
 */
public class HandTask implements IBaseTask{
    private static final String TAG = "HandTask";
    @Override
    public void doAction(String isTask, IBaseTask iBaseTask) {
        if (TAG.equals(isTask)){
            System.out.println(TAG);
        }else {
            iBaseTask.doAction(isTask,iBaseTask);
        }
    }
}
/**
 * @author Renzituo
 * time: 2022/2/14 22:43
 * desc: xxx
 */
public class FootTask implements IBaseTask{
    private static final String TAG = "FootTask";
    @Override
    public void doAction(String isTask, IBaseTask iBaseTask) {
        if (TAG.equals(isTask)){
            System.out.println(TAG);
        }else {
            iBaseTask.doAction(isTask,iBaseTask);
        }
    }
}

3.3 调用

ChainManager chainManager = new ChainManager();
chainManager.addTask(new MouthTask());
chainManager.addTask(new HandTask());
chainManager.addTask(new FootTask());
chainManager.doAction("MouthTask",chainManager);

4. 复制攻略

4.1 Carson带你学设计模式:这是一份全面 & 详细的设计模式学习指南