JAVA设计模式,责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你将请求的发送者和接收者解耦。在这种模式下,请求沿着责任链传递,直到某个对象能够处理该请求为止。每个对象都有机会处理请求或将其传递给链上的下一个对象。这种模式非常适合处理多步骤或多条件的请求处理流程。

主要组成部分

  1. **Handler(处理器)**:定义一个处理请求的接口,通常包含一个`handleRequest`方法。有时候也包含一个指向下一个处理器的引用。

  2. **ConcreteHandler(具体处理器)**:实现处理请求的接口。如果能处理,则处理请求;否则,将请求传递给下一个处理器。

  3. **Client(客户端)**:创建并连接处理器链,然后向链的起始点发送请求。

实现步骤

  1. 定义一个处理器接口。

  2. 创建多个具体处理器类,实现处理器接口,并决定是否处理请求或传递给下一个处理器。

  3. 在客户端构建处理器链,并发送请求。

示例代码

假设我们有一个审批系统,不同级别的经理可以处理不同金额的报销请求。

处理器接口

```java

public interface Handler {

void setNext(Handler next);

void handleRequest(int amount);

}

```

具体处理器

```java

public class ManagerA implements Handler {

private Handler next;

@Override

public void setNext(Handler next) {

this.next = next;

}

@Override

public void handleRequest(int amount) {

if (amount <= 500) {

System.out.println("ManagerA approved the request for " + amount + " yuan.");

} else if (next != null) {

next.handleRequest(amount);

}

}

}

public class ManagerB implements Handler {

private Handler next;

@Override

public void setNext(Handler next) {

this.next = next;

}

@Override

public void handleRequest(int amount) {

if (amount > 500 && amount <= 1000) {

System.out.println("ManagerB approved the request for " + amount + " yuan.");

} else if (next != null) {

next.handleRequest(amount);

}

}

}

public class ManagerC implements Handler {

private Handler next;

@Override

public void setNext(Handler next) {

this.next = next;

}

@Override

public void handleRequest(int amount) {

if (amount > 1000) {

System.out.println("ManagerC approved the request for " + amount + " yuan.");

} else if (next != null) {

next.handleRequest(amount);

}

}

}

```

客户端

```java

public class Client {

public static void main(String\[\] args) {

Handler managerA = new ManagerA();

Handler managerB = new ManagerB();

Handler managerC = new ManagerC();

// 构建责任链

managerA.setNext(managerB);

managerB.setNext(managerC);

// 发送请求

managerA.handleRequest(300); // ManagerA

managerA.handleRequest(700); // ManagerB

managerA.handleRequest(1500); // ManagerC

}

}

```

运行结果

```

ManagerA approved the request for 300 yuan.

ManagerB approved the request for 700 yuan.

ManagerC approved the request for 1500 yuan.

```

总结

责任链模式使得多个对象有机会处理请求,从而避免了请求的发送者和接收者之间的耦合。每个对象都不需要知道链的结构,只需要知道如何将请求传递给下一个对象即可。这种模式非常适合于处理需要多个步骤或条件判断的场景。

相关推荐
KhalilRuan3 小时前
设计模式小记
设计模式
SL_staff4 小时前
JVS数字底座实践:如何复用企业文档能力快速构建知识类应用
java·数据库·程序员
sugar__salt4 小时前
MyBatis ③动态 SQL 完全指南 —— 从条件拼接到批量操作
java·sql·mybatis
卡牌RWA研究院4 小时前
Relique:一张精品卡牌如何从收藏品变成可交易的链上资产?
设计模式·金融·区块链·创业创新
吃饱了得干活4 小时前
Java并发安全:看这一篇就懂了!
java·后端·面试
前端双越老师4 小时前
前端学习 Java 其实很容易:TS 和 Java 语法的 N 个相同点
java·全栈
evans在进步5 小时前
LeetCode 17:电话号码的字母组合——Java DFS 回溯法详解
java·leetcode·深度优先
2401_850481175 小时前
UVA10391
java
UQR5 小时前
一、Java基础高频面试题
java·开发语言
AC赳赳老秦5 小时前
网页公开附件自动采集:OpenClaw 批量下载页面内嵌 Word/Excel 附件,统一格式后结构化入库
java·python·word·php·excel·deepseek·openclaw