本文转载自微信公众号《我好困》,作者萌新。转载此文,好困烦请联系我公众号。责任链模式:定义一个处理链,请求发起者发起一个请求(原材料),请求(原材料)通过这个处理链一步步处理。输出最终产品输出。意图请求的发起者和接收者通过这个处理链解耦。将各个处理器连接起来形成一个处理链,请求逐级传递和处理,直到处理完成并输出。主要解决方案是责任链上的处理者负责处理请求,请求发起者只需要将请求发送到责任链即可,不需要关心请求的处理细节和传递要求。关键代码将各个职责处理器逐级连接起来,组装成一个职责链。优点1.减少耦合2.简化对象,使对象不需要知道责任链的具体实现3.增强给对象分配职责的灵活性。如果增加一个新的职责,只需要增加一个处理器在链上进行处理即可。使用场景有多个对象可以处理同一个请求。例如:定义了一个用户对象,需要对这个用户对象进行一系列的处理。然后可以将各种处理抽象为处理器,将各种处理器连接起来形成处理链。对象被送入处理链进行处理。示例图:具体实现创建用户类1/**2*用户对象,对其进行处理3*/4@Data5@AllArgsConstructor6@NoArgsConstructor7publicclassUser{89privateintid;1011privateStringname;1213}创建各种汇编器1/**2*AssemblyDevice(处理器)3*/4publicinterfaceSeter{56//设置参数7voiddoSet(Trequest);8}IDassembler1/**2*IDassembler3*/4publicclassIdSeterimplementsSeter{56@Override7publicvoiddoSet(Useruser){8user.setId(1);9}0}nameassembler1/**2*3*nameassembler4*/5publicclassNameSeterimplementsSeter{67@Override8publicvoiddoSet(Useruser){9user.setName("mengxin");0}接下来定义链responsibility并连接assemblers1/**2*chainofresponsibilitymode(抽象的责任链,可以定义多条链)3*/4publicinterfaceChain{56//Assemble7voidassemble(Trequest);89}Userresponsibilitychain1/**2*用户责任链3*/4publicclassUserChainimplementsChain{56privatefinalList>seters=newLinkedList<>();78//初始化(组装责任链),injectseterProcessor处理9publicUserChain(){10//injectidsetter11seters.add(newIdSeter());12//注入名称设置器13seters.add(newNameSeter());14}1516/**17*用户责任链,调用设置器,组装参数18*@paramrequest19*/20@Override21publicvoidassemble(Userrequest){22seters.forEach(userSeter->userSeter.doSet(request));23}24}测试调用1/**2*职责链测试类3*/4publicclassTest{567publicstaticvoidmain(String[]args){8//用户责任链9UserChainuserChain=newUserChain();10Useruser=newUser();11//调用责任链,设置参数12userChain.assemble(user);13//处理后得到的对象值14System.out.println(user.getId()+","+user.getName());15}16}