😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊
前言:
今天,项目扩展要我进行模板文件校验。原本已经进行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,再多也是差不多类型的。在此记录实际用到的代码。
🙌🙌🙌🙌🙌🙌🙌🙌结束🙌🙌🙌🙌🙌🙌🙌🙌🙌