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.

```

总结

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

相关推荐
方也_arkling7 小时前
【Java-Day08】static / final / 枚举
java·开发语言
橙淮7 小时前
Spring Bean作用域与生命周期全解析
java·spring
Chengbei117 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_1127 小时前
web-第一次课后作业
java·开发语言·idea
秋98 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本8 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
DIY源码阁8 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse
basketball6169 小时前
C++ NULL 和 nullptr 区别 以及 nullptr 的核心实现
java·开发语言·c++
JAVA面经实录91710 小时前
MyBatis面试题库
java·mybatis
小江的记录本10 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试