一、责任链模式
为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。



二、责任链模式应用场景
网关权限控制责任链模式
在网关作为微服务程序的入口,拦截客服端所有的请求实现权限控制,比如先判断api接口限流、黑名单、用户会话、参数过滤。
API接口限流-》黑名单拦截-》用户会话-》参数过滤

代码实现:
1、项目结构

2、责任链抽象类(核心)
public abstract class GatewayHandler {
/**
* 下一个handler
*/
protected GatewayHandler nextGatewayHandler;
/**
* 使用抽象定义共同方法的行为
*/
public abstract void service();
/**
* 设置下一个GatewayHandler
* @param nextGatewayHandler
*/
public void setNextGatewayHandler(GatewayHandler nextGatewayHandler){
this.nextGatewayHandler = nextGatewayHandler;
}
/**
* 执行下一个handler
*/
protected void nextService() {
if (nextGatewayHandler != null) {
nextGatewayHandler.service();
}
}
}
3、第一关:网关限流判断处理器
public class CurrentLimitHandler extends GatewayHandler {
@Override
public void service() {
System.out.println("第一关网关限流判断.....");
nextService();
}
}
4、第二关:黑名单拦截处理器
public class BlacklistHandler extends GatewayHandler {
@Override
public void service() {
System.out.println("第二关黑名单过滤.....");
nextService();
}
}
5、第三关:用户会话拦截
public class ConversationHandler extends GatewayHandler {
@Override
public void service() {
System.out.println("第三关用户会话拦截....");
}
}
6、工厂类
作用是把整个责任链串联起来,返回第一个
public class FactoryHandler {
public CurrentLimitHandler getFirstGatewayHandler() {
// 第一关
CurrentLimitHandler currentLimitHandler = new CurrentLimitHandler();
// 第二关
BlacklistHandler blacklistHandler = new BlacklistHandler();
currentLimitHandler.setNextGatewayHandler(blacklistHandler);
// 第三关

责任链模式是一种设计模式,用于将请求沿着处理者链传递,直到被处理。常见应用场景如网关权限控制,通过设置一系列拦截器(如限流、黑名单、会话检查、参数过滤)实现。本文通过代码示例展示了如何在Java中实现责任链模式,包括创建抽象处理器、具体处理器以及工厂类,形成一条完整的处理链。此外,还介绍了类似审批流程的责任链结构,每个环节实现不同的业务逻辑,通过调用next方法递归处理后续环节。责任链模式适用于单一请求需要多个处理者协作的情况,降低耦合度。
最低0.47元/天 解锁文章
1294

被折叠的 条评论
为什么被折叠?



