主页 > 游戏开发  > 

java-->责任链模式

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

标签:

java-->责任链模式由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“java-->责任链模式