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.

```

总结

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

相关推荐
JAVA面经实录9172 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
许彰午4 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
Bat U5 小时前
JavaEE|多线程初阶(七)
java·开发语言
掌心向暖RPA自动化8 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
日取其半万世不竭8 小时前
Minecraft Java版社区服务器搭建教程(Linux,适合新手)
java·linux·服务器
TeamDev9 小时前
JxBrowser 9.0.0 版本发布啦!
java·前端·混合应用·jxbrowser·浏览器控件·跨平台渲染·原声输入
AI人工智能+电脑小能手9 小时前
【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征
java·开发语言·后端·面试
geovindu9 小时前
go: Strategy Pattern
开发语言·设计模式·golang·策略模式
AI人工智能+电脑小能手9 小时前
【大白话说Java面试题】【Java基础篇】第25题:JDK1.8的新特性有哪些
java·开发语言·后端·面试
likerhood10 小时前
SLF4J: Failed to load class “StaticLoggerBinder“ 解决
java·log4j·maven