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.

```

总结

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

相关推荐
一只大侠8 分钟前
计算S=1!+2!+3!+…+N!的值:JAVA
java·开发语言
一只大侠11 分钟前
输入一串字符,以“?”结束。统计其中字母个数,数字个数,其它符号个数。:JAVA
java·开发语言·算法
以后不吃煲仔饭12 分钟前
面试小札:线程池
java·后端·面试
Oneforlove_twoforjob12 分钟前
【Java基础面试题011】什么是Java中的自动装箱和拆箱?
java·开发语言
优雅的落幕28 分钟前
多线程---线程安全(synchronized)
java·开发语言·jvm
Charlie__ZS29 分钟前
帝可得-设备管理
java·maven·intellij-idea·idea
爱上语文35 分钟前
请求响应:常见参数接收及封装(数组集合参数及日期参数)
java·开发语言·spring boot·后端
孙同学_38 分钟前
【Linux篇】权限管理 - 用户与组权限详解
java·linux·服务器
CQU_JIAKE1 小时前
926[study]Docker,DHCP
java·开发语言
浪 子1 小时前
SpringBoot mq快速上手
java·spring boot·spring