当前位置: 首页 > news >正文

java-->责任链模式

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

前言:

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

开始正文

该模式中,请求沿着责任链依次传递,直到有一个对象处理请求为止。责任链模式的核心是定义责任链节点的接口以及节点之间的关系,它允许动态的增加和修改责任链中的节点。
使用场景:
例如日志记录、异常处理、权限验证等。

我这次实际生产中用的相当于校验的作用了。
直接上代码:

//和外部对接,让外部调用的责任链封装体
@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对象中,让外部调用的。

@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);
    }
}
//责任链父类
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);
}

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

@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;
    }
}

外部调用:

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

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

相关文章:

  • 微服务网关
  • yolo11s rknn无法detect的bugfix - step by step
  • SolidWorks速成教程P4-1【装配体 | 第一节】——插入零件方法基本功能介绍
  • 力扣216--组合总和III
  • 简单记录一次训练的怪异变慢
  • 队列+宽搜(典型算法思想)—— OJ例题算法解析思路
  • ORB-SLAM3的源码学习: CameraModels相机模型文件
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑧】
  • 【C++初阶】类和对象③之运算符重载--从日期类推广自定义类型运算的方法奥秘
  • 使用Navicat for MySQL工具连接本地虚拟机上的MySQL
  • mybatis 入门案例
  • 磁电偶极子学习笔记2 60GHz 双极化 二维转换波束 口径耦合 磁电偶极子宽带天线阵列
  • 云平台结合DeepSeek的AI模型优化实践:技术突破与应用革新
  • Redis中的某一热点数据缓存过期了,此时有大量请求访问怎么办
  • 简述mysql主从复制原理及工作过程,配置一主两从并验证
  • 封装红黑树实现map和set
  • 缺陷检测之图片标注工具--labme
  • 【python】You-Get
  • 使用京东AsyncTool实现异步编排
  • 4、IP查找工具-Angry IP Scanner
  • 宋徽宗《芙蓉锦鸡图》亮相,故宫首展历代动物绘画
  • 83岁连丽如每周登台说书,还上了15堂连派评书课
  • 以“最美通缉犯”为噱头直播?光明网:违法犯罪不应成网红跳板
  • 初步结果显示加拿大自由党赢得大选,外交部回应
  • 牛市早报|国家发改委:将推出做好稳就业稳经济推动高质量发展若干举措
  • 杜前任宁波中院代理院长,卸任宁波海事法院院长