魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • DesignPattern - 责任链模式

文章摘要: 责任链模式使用总结。

简介

简要说明

  • 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式。
  • 将请求的发送者和接收者解耦,将多个接收者连成一条链,并沿着这条链传递请求,直到链上的某个接收者处理这个请求。

主要功能

  • 分发请求到多个对象。
  • 避免请求发送者和接收者之间的耦合。
  • 增加新的处理者无需修改现有代码。

注意事项

  • 链中的处理者对象数量可能会影响性能。
  • 如果请求在链的末端没有被处理,需要有一个明确的结束条件。
  • 避免责任链过长,否则可能会造成调试困难。

适用场景

  • 当多个对象可以处理同一个请求,但具体由哪个对象处理在运行时动态决定时。
  • 当你想在不明确指定接收者的情况下,向多个对象中的一个提交请求时。
  • 当处理者有多个,并且它们的责任可以按照一定的顺序排列时。

Java 8

案例

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

    // 设置后继者
    public void setSuccessor(Handler successor) {
        this.successor = successor;
    }

    // 处理请求的方法
    public abstract void handleRequest(int request);
}

// 具体处理者A
class ConcreteHandlerA extends Handler {
    @Override
    public void handleRequest(int request) {
        if (request >= 0 && request < 10) {
            System.out.println("ConcreteHandlerA 处理请求 " + request);
        } else if (successor != null) {
            successor.handleRequest(request); // 传递给下一个处理者
        }
    }
}

// 具体处理者B
class ConcreteHandlerB extends Handler {
    @Override
    public void handleRequest(int request) {
        if (request >= 10 && request < 20) {
            System.out.println("ConcreteHandlerB 处理请求 " + request);
        } else if (successor != null) {
            successor.handleRequest(request); // 传递给下一个处理者
        }
    }
}

// 客户端代码
public class ChainOfResponsibilityPatternDemo {
    public static void main(String[] args) {
        // 创建责任链
        Handler handlerA = new ConcreteHandlerA();
        Handler handlerB = new ConcreteHandlerB();
        handlerA.setSuccessor(handlerB); // 设置后继者

        // 发送请求
        handlerA.handleRequest(5); // ConcreteHandlerA 处理请求
        handlerA.handleRequest(15); // ConcreteHandlerB 处理请求
        handlerA.handleRequest(25); // 没有处理者处理请求
    }
}

注释

  • 在这个例子中,Handler是一个抽象类,定义了处理请求的方法handleRequest和一个设置后继者的方法setSuccessor。ConcreteHandlerA和ConcreteHandlerB是具体的处理者类,它们继承自Handler类,并实现了handleRequest方法。
  • 在ChainOfResponsibilityPatternDemo的main方法中,我们创建了两个处理者对象handlerA和handlerB,并将它们设置成责任链。当请求被发送到handlerA时,如果请求的值在handlerA的处理范围内,则handlerA会处理该请求;否则,它会将请求传递给handlerB。如果请求在handlerB的处理范围内,则handlerB会处理该请求;否则,请求将不会被处理,因为没有设置更多的处理者。
更新时间: 2025/10/3 17:56