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,再多也是差不多类型的。在此记录实际用到的代码。

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

相关推荐
wuminyu13 小时前
Java锁机制之park与futex系统级协同机制解析
java·linux·c语言·jvm·c++
疯狂打码的少年13 小时前
编译程序与解释程序的区别
java·开发语言·笔记
caimouse16 小时前
reactos编码规范
c语言·开发语言
xieliyu.20 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
明夜之约20 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee20 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Jinkxs20 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
辣机小司20 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
CryptoPP21 小时前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
ZC跨境爬虫21 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript