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.

```

总结

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

相关推荐
非 白39 分钟前
【Java】单例模式
java·笔记·单例模式
IDRSolutions_CN1 小时前
如何在 PDF 文件中嵌入自定义数据
java·经验分享·pdf·软件工程·团队开发
_风中无我。1 小时前
Spring的过滤器获取请求体中JSON参数,同时解决Controller获取不到请求体参数的问题。
java·spring·json
bing_1581 小时前
Spring Boot 中为什么 需要限流、降级和熔断?
java
万兴丶1 小时前
Unity 适用于单机游戏的红点系统(前缀树 | 数据结构 | 设计模式 | 算法 | 含源码)
数据结构·unity·设计模式·c#
ccm031 小时前
高效开发助手:深入了解Hutool工具库
java·g工具库
雪落南城1 小时前
【Maven】maven加载不到包
java·maven
菜鸟一枚在这1 小时前
深入剖析抽象工厂模式:设计模式中的架构利器
设计模式·架构·抽象工厂模式
码熔burning1 小时前
(三)趣学设计模式 之 抽象工厂模式!
设计模式·抽象工厂模式
程序猿多布2 小时前
C#设计模式 学习笔记
设计模式·c#