十三、责任链模式

张开发
2026/5/31 11:24:05 15 分钟阅读
十三、责任链模式
目的 使多个对象都有机会处理请求从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链并沿着这条链传递请求直到有一个对象处理它为止。核心 定义处理者接口含处理方法和设置后继者的方法。每个具体处理者判断自己能否处理请求不能则转发给后继者。场景适用于多级审批流程如请假申请和报销审批。首先有一个抽象处理者声明了若干个处理方法packagechainofresponsibility;publicabstractclassFilter{privateFiltersuccessor;publicvoidsetSuccessor(Filtersuccessor){this.successorsuccessor;// 设置下一个过滤器}publicFiltergetSuccessor(){// 用以判断是否有下一个过滤器returnsuccessor;}publicabstractvoidhandleFilter();publicabstractvoidhandleFilter2();}具体处理者实现了若干个具体处理方法packagechainofresponsibility;publicclassConcreteFilterextendsFilter{privateStringname;publicConcreteFilter(Stringname){this.namename;}OverridepublicvoidhandleFilter(){System.out.println(name 处理请求);if(getSuccessor()!null){// 如果过滤器实例不为空getSuccessor().handleFilter();// 递归所有的过滤器都要处理}}OverridepublicvoidhandleFilter2(){if(getSuccessor()!null){getSuccessor().handleFilter2();}else{// 最后一个过滤器处理请求System.out.println(name 处理请求);}}}最后是函数入口packagechainofresponsibility;publicclassMainTest{publicstaticvoidmain(String[]args){// 创建过滤器Filterfilter1newConcreteFilter(村长);Filterfilter2newConcreteFilter(镇长);Filterfilter3newConcreteFilter(区长);Filterfilter4newConcreteFilter(市长);// 构建责任链filter1.setSuccessor(filter2);filter2.setSuccessor(filter3);filter3.setSuccessor(filter4);System.out.println(-----通过每一个过滤器包括最后一个顺序也是一次一次的处理----);filter1.handleFilter();System.out.println(----现在是交给最后一个过滤器处理----);filter1.handleFilter2();}}终端输出-----依次通过每一个过滤器处理---- 村长 处理请求 镇长 处理请求 区长 处理请求 市长 处理请求 -----直接给最后一个过滤器处理---- 市长 处理请求

更多文章