浅析Java责任链模式实现

一、概要

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

二、应用场景:

1.多条件流程判断:权限相关控制

2.过滤器:在Servlet中,过滤器就是使用责任链模式实现的。每个过滤器都可以决定是否处理请求,或者将其转发给下一个过滤器进行处理。

3.异常处理:在Java中,可以使用责任链模式来处理异常。首先,程序先尝试使用自定义的异常处理器来处理异常,如果该处理器无法处理异常,则将其转发给下一个处理器进行处理。

三、使用案例

1.首先先定义一个抽象类

csharp 复制代码
public abstract class ChainHandler {
    private ChainHandler processor;

    public void setNextProcessor(ChainHandler processor){
        this.processor=processor;
    }

    public abstract void handlerRequest();
}

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

第一个:

csharp 复制代码
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();
    }
}

第二个:

csharp 复制代码
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();
    }
}

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

csharp 复制代码
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();
    }
}

结果如下:

大家有兴趣可以了解下。

相关推荐
Xzh04234 分钟前
AI Agent 学习路线(Java 后端方向)
java·人工智能·学习
Cloud_Shy61828 分钟前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 33 - 35)
开发语言·人工智能·笔记·python·学习方法
星恒随风33 分钟前
C++ 类和对象入门(五):初始化列表、explicit 和 static 成员详解
开发语言·c++·笔记·学习·状态模式
艾利克斯冰1 小时前
Java 设计模式-行为型模式(更新中)
java·开发语言·设计模式
倒霉蛋小马1 小时前
Java新特性:record关键字
java·开发语言
折哥的程序人生 · 物流技术专研1 小时前
《Java 100 天进阶之路》第95篇:消息队列基础(RocketMQ/Kafka)(2026版)
java·面试·kafka·rocketmq·java-rocketmq·求职招聘
budingxiaomoli1 小时前
Spring日志
java·开发语言
牛油果子哥q1 小时前
【C++ STL vector】C++ STL vector 终极精讲:动态数组底层原理、两倍扩容机制、迭代器失效、增删查改、性能剖析与工程避坑指南
开发语言·c++
IT空门:门主1 小时前
Spring 注入三剑客:@Resource、@Autowired、@RequiredArgsConstructor 到底该用哪个?
java·后端·spring
贩卖黄昏的熊2 小时前
flex 布局快速梳理
开发语言·javascript·css3·html5