• 浅析Java责任链模式实现


    一、概要
    定义:责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。

    二、应用场景:
    1.多条件流程判断:权限相关控制
    2.过滤器:在Servlet中,过滤器就是使用责任链模式实现的。每个过滤器都可以决定是否处理请求,或者将其转发给下一个过滤器进行处理。
    3.异常处理:在Java中,可以使用责任链模式来处理异常。首先,程序先尝试使用自定义的异常处理器来处理异常,如果该处理器无法处理异常,则将其转发给下一个处理器进行处理。

    三、使用案例
    1.首先先定义一个抽象类

    public abstract class ChainHandler {
        private ChainHandler processor;
    
        public void setNextProcessor(ChainHandler processor){
            this.processor=processor;
        }
    
        public abstract void handlerRequest();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.接着我们定义2个实现类。
    第一个:

    import java.util.Objects;
    
    public class FirstStepHandler extends ChainHandler{
        private ChainHandler processor;
        private Object obj;
    
        public FirstStepHandler(Object obj){
            this.obj=obj;
        }
        @Override
        public void setNextProcessor(ChainHandler processor){
            this.processor=processor;
        }
        @Override
        public void handlerRequest() {
            if(Objects.isNull(obj)) {
                System.out.println("责任链第一步处理,处理完成,到此结束");
                return;
            }
            System.out.println("责任链第一步处理,处理完成,流转下一步");
            if (Objects.isNull(processor)) {
                System.out.println("责任链已到底");
                return;
            }
            processor.handlerRequest();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    第二个:

    import java.util.Objects;
    
    public class SecondStepHandler extends ChainHandler{
        private ChainHandler processor;
        private Object obj;
    
        public SecondStepHandler(Object obj){
            this.obj=obj;
        }
    
        @Override
        public void setNextProcessor(ChainHandler processor){
            this.processor=processor;
        }
        @Override
        public void handlerRequest() {
            if(Objects.isNull(obj)) {
                System.out.println("责任链第二步处理,处理完成,到此结束");
                return;
            }
            System.out.println("责任链第二步处理,处理完成,流转下一步");
            if (Objects.isNull(processor)) {
                System.out.println("责任链已到底");
                return;
            }
            processor.handlerRequest();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    3.最后我们可以测试一下。

    public class ChainMain {
        public static void main(String[] args) {
            ChainHandler chainOne= new FirstStepHandler(new Object());
    
            ChainHandler chainTwo= new SecondStepHandler(new Object());
    
            chainOne.setNextProcessor(chainTwo);
            chainOne.handlerRequest();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    结果如下:
    在这里插入图片描述
    大家有兴趣可以了解下。

  • 相关阅读:
    8、常用基本命令(重要)
    利用四元数进行蛋白质原子坐标旋转变换
    爬虫 — Bs4 数据解析
    抖音阳哥:选品师项目究竟能不能算蓝海项目?
    YOLOv7独家改进:分层特征融合策略MSBlock | 南开大学提出YOLO-MS |超越YOLOv8与RTMDet,即插即用打破性能瓶颈
    【Visual Leak Detector】源码文件概览
    Java 线程池之ThreadPoolExecutor学习总结
    理解“闭包”
    【Unity编辑器扩展】il2cpp代码裁剪(Strip Engine Code)配置工具
    HTML期末学生大作业:中华传统文化【苏绣手工艺】带psd设计图(15页)
  • 原文地址:https://blog.csdn.net/qq_42077317/article/details/132919153