设计模式——责任链模式

设计模式------责任链模式

在 Java 编程中,责任链模式是一种非常有用的设计模式。它能够有效地处理请求的发送者和接收者之间的解耦,为复杂的业务逻辑提供了清晰且灵活的解决方案。

一、责任链模式的概念

责任链模式是一种行为型设计模式,它使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些处理对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。

二、责任链模式的结构

抽象处理者(Handler): 定义了处理请求的接口,包含一个指向下一个处理者的引用。
具体处理者(ConcreteHandler): 实现抽象处理者的接口,处理自己职责范围内的请求,如果无法处理则将请求传递给下一个处理者。

三、责任链模式的优势

降低耦合度: 请求的发送者无需知道具体由哪个对象来处理请求,只需将请求发送到责任链上即可。
增强灵活性: 可以方便地动态添加或删除处理者,改变责任链的结构和顺序。
提高可扩展性: 新的处理者可以轻松地加入到责任链中,而不会影响现有的代码。

四、Java 中责任链模式的实现示例

下面是一个简单的责任链模式的Java实现示例:

复制代码
import java.util.ArrayList;
import java.util.List;

// 抽象处理者
abstract class Handler {
    protected Handler successor;

    public void setSuccessor(Handler successor) {
        this.successor = successor;
    }

    public abstract void handleRequest(int request);
}

// 具体处理者1
class ConcreteHandler1 extends Handler {
    @Override
    public void handleRequest(int request) {
        if (request >= 0 && request < 10) {
            System.out.println("ConcreteHandler1 handled request: " + request);
        } else if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

// 具体处理者2
class ConcreteHandler2 extends Handler {
    @Override
    public void handleRequest(int request) {
        if (request >= 10 && request < 20) {
            System.out.println("ConcreteHandler2 handled request: " + request);
        } else if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();

        // 构建责任链
        handler1.setSuccessor(handler2);

        // 发送请求
        int[] requests = {5, 15, 25};
        for (int request : requests) {
            handler1.handleRequest(request);
        }
    }
}

输出:

复制代码
ConcreteHandler1 handled request: 5
ConcreteHandler2 handled request: 15

说明:
抽象处理者 (Handler) 定义了一个处理请求的方法 handleRequest。
具体处理者 (ConcreteHandler1, ConcreteHandler2) 实现了 handleRequest 方法,每个处理者都会检查请求是否属于它负责的范围,如果是,则处理请求;如果不是,则将请求传递给后继处理者。
客户端 创建了处理者对象,并构建了一个责任链。然后发送请求到链的第一个处理者。

五、责任链模式的应用场景

日志处理: 不同级别的日志可以由不同的处理者进行处理。
审批流程: 如请假审批、报销审批等,不同的审批级别由不同的人员处理。

责任链模式非常适合处理 多层级 的请求,例如权限验证、异常处理等场景。通过动态地构建处理者链,可以很容易地扩展或修改处理逻辑。

六、总结

责任链模式在 Java 编程中是一种强大的工具,它能够帮助我们构建更灵活、可扩展和低耦合的系统。通过合理地设计责任链,我们可以更好地处理复杂的业务逻辑,提高代码的可维护性和可复用性。

相关推荐
dearxue5 分钟前
Api 设计,你的max/min 长度、元素数与属性数用对了吗?
java·spring·api
℡余晖^5 分钟前
每日面试题08:wait()和sleep()的区别
java·开发语言·jvm
27669582926 分钟前
美团闪购最新版 mtgsig1.2
java·python·node·mtgsig·美团闪购商家端·美团闪购·mtgsig1.1
使一颗心免于哀伤12 分钟前
《设计模式之禅》笔记摘录 - 8.命令模式
笔记·设计模式
牛奶咖啡1312 分钟前
学习设计模式《十八》——备忘录模式
学习·设计模式·备忘录模式·认识备忘录模式·备忘录模式的优缺点·何时使用备忘录模式·备忘录模式的使用示例
用户403159863966317 分钟前
版本号升级统计
java·算法
RainbowSea33 分钟前
用户中心——比如:腾讯的QQ账号可以登录到很多应用当中 02
java·spring boot·mysql
RainbowSea40 分钟前
用户中心——比如:腾讯的QQ账号可以登录到很多应用当中 01
java·spring boot·mysql
超浪的晨1 小时前
Java List 集合详解:从基础到实战,掌握 Java 列表操作全貌
java·开发语言·后端·学习·个人开发
超浪的晨1 小时前
Java Set 集合详解:从基础语法到实战应用,彻底掌握去重与唯一性集合
java·开发语言·后端·学习·个人开发