java-->责任链模式

😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊

前言:

今天,项目扩展要我进行模板文件校验。原本已经进行1号,2号,3号模板文件校验了,现新加了模板文件。。我需要再次基础上进行模板文件校验!我打开源代码开始再次基础上扩展,发现原来的人使用的是责任链模式,然后开始了解责任链,扩展完毕后发现!真tm好用!在此记录一下~

开始正文

该模式中,请求沿着责任链依次传递,直到有一个对象处理请求为止。责任链模式的核心是定义责任链节点的接口以及节点之间的关系,它允许动态的增加和修改责任链中的节点。

使用场景:

例如日志记录、异常处理、权限验证等。

我这次实际生产中用的相当于校验的作用了。

直接上代码:

java 复制代码
//和外部对接,让外部调用的责任链封装体
@Service
public class MyFilterHandler{
	@Autowired
	private List<MyFilter> chain;
	private MyFilter firstFilter;
	@PostConstruct
	private void constructChain(){
        if(chain==null||chain.size()==0){
            throw new RuntimeException("找不到责任链");
        }
        firstFilter=chain.get(0);
        for (int i = 0; i < chain.size(); i++) {
            if(i==chain.size());i++){
                chain.get(i).setNextFilter(null);
            }else{
                chain.get(i).setNextFilter(chain.get(i+1));
            }
        }
    }
    //供外调用方法
    public void executionChain(LoanBalanceVo vo){
        LoanBalanceVo process=null;
        process=firstFilter.process(vo);
        Map<String,Object> map= process.getResult();
        System.out.println(map);
    }
	
]

上面的LoanBalanceVo 对象就是用来封装责任来拿参数和处理返回结果,把返回结果放进result的map对象中,让外部调用的。

java 复制代码
@Data
class LoanBalanceVo {
    private Map<String,Object> result;
    private String businessId;
    public LoanBalanceVo(String businessId){
        this.businessId=businessId;
        this.result=new HashMap<>();
    }
    public void put(String a){
        result.put(a,a);
    }
}
java 复制代码
//责任链父类
abstract class MyFilter{
    private MyFilter nextFilter;
    public setNextFilter(MyFilter nextFilter){
        this.nextFilter=nextFilter;
    }
    public MyFilter getNextFilter(MyFilter nextFilter){
        return nextFilter;
    }
    public LoanBalanceVo process(LoanBalanceVo vo);
}

接下来就是五个子类分别实现抽象父类:

java 复制代码
@Order(1)
class A extends MyFilter{
    public LoanBalanceVo process(LoanBalanceVo vo){
        //处理逻辑
        return getNextFilter.process(vo);
    }
}
@Order(2)
class B extends MyFilter{
    public LoanBalanceVo process(LoanBalanceVo vo){
        //处理逻辑
        return getNextFilter.process(vo);
    }
}

@Order(3)
class C extends MyFilter{
    public LoanBalanceVo process(LoanBalanceVo vo){
        //处理逻辑
        return getNextFilter.process(vo);
    }
}
@Order(4)
class D extends MyFilter{
    public LoanBalanceVo process(LoanBalanceVo vo){
        //处理逻辑
        return getNextFilter.process(vo);
    }
}
@Order(5)
class E extends MyFilter{
    public LoanBalanceVo process(LoanBalanceVo vo){
        //处理逻辑
        return vo;
    }
}

外部调用:

java 复制代码
class my{
	@Resource
	private MyFilterHandler myFilterHandler;
    public static void main(String[] args) {
        myFilterHandler.executionChain(new LoanBalanceVo("123"));
    }
}

外面也有很多其他责任链demo,再多也是差不多类型的。在此记录实际用到的代码。

🙌🙌🙌🙌🙌🙌🙌🙌结束🙌🙌🙌🙌🙌🙌🙌🙌🙌

相关推荐
Rain的Java大神之路13 分钟前
面了 50 个候选人,90% 都挂在 LeetCode 3 无重复字符的最长子串:滑动窗口的 5 个致命坑
java·后端·leetcode
西凉的悲伤14 分钟前
Jsoup 库 HTML 解析详解
java·前端·html·jsoup
qq_4017004120 分钟前
Qt Modbus 源码剖析:从 QModbusClient 到工业级通信框架
开发语言·qt·系统架构
星夜离尘5622 分钟前
MATLAB 角度解缠遇到丢样:先分段,再说明圈数为什么不可恢复
开发语言·matlab
十碗饭吃不饱26 分钟前
Apache POI 踩坑:setFontFamily 二次设置字体不生效、样式残留问题深度解析
java·word·apache
我命由我1234530 分钟前
6-2.Python 异常处理 - 异常捕获(捕获指定异常、常见异常类型、异常信息)
java·运维·开发语言·python·http·https·java-ee
ZoeLandia33 分钟前
React08:自定义 Hook
开发语言·前端·react.js·typescript
zaizai10071 小时前
STL深度剖析2
java·c++·算法
染指11101 小时前
157.Agent-LangGraph-工具(实现ReAct Agent模式)
开发语言·人工智能·python·langchain·agents
程序猿乐锅1 小时前
【从0-1学习Python | 第九篇】继承
开发语言·后端·python·学习·fastapi