当前位置: 首页 > 后端技术 > Java

责任链模型

时间:2023-04-01 21:29:37 Java

通过构建管道,一个请求被顺序处理多次。下面以登录为例,实现责任链模式请求体类publicclassUserInfo{privateStringusername;私有字符串密码;私有字符串角色;publicStringgetUsername(){返回用户名;}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetPassword(){返回密码;}publicvoidsetPassword(Stringpassword){this.password=password;}publicStringgetRole(){返回角色;}publicvoidsetRole(Stringrole){this.role=role;}}抽象处理类publicabstractclassHandler{Handlernext;publicvoidsetNext(Handlerhandler){this.next=handler;}publicabstractvoidhandle(UserInfoinfo);}具体流程验证密码→权限验证publicclassLoginHandlerextendsHandler{@Overridepublicvoidhandle(UserInfoinfo){if("eacape".equals(info.getUsername())&&"123456".equals(info.getPassword())){System.out.println("密码验证通过");super.next.handle(信息);}else{thrownewRuntimeException("账号或密码错误");}}}publicclassRoleHandlerextendsHandler{@Overridepublicvoidhandle(UserInfoinfo){if("1".equals(info.getRole())){System.out.println("登录成功");}else{thrownewRuntimeException("NoPermission");}}}测试公共类ChainTest{@Testpublicvoidtest(){UserInfoinfo=newUserInfo();info.setUsername("eacape");info.setPassword("123456");info.setRole("1");处理程序登录=newLoginHandler();login.setNext(newRoleHandler());登录.句柄(信息);}}======结果======密码验证通过登录成功可以结合构建器模式构建调用链抽象处理类&构造函数publicabstractclassHandlerBuilder{HandlerBuildernext;公共抽象无效句柄(UserInfo信息);publicstaticclassBuilder{privateHandlerBuildertail;私有HandlerBuilder头;publicBuilderaddHandler(HandlerBuilderhandler){if(head==null){head=tail=handler;}else{tail.next=handler;tail=tail.next;}返回这个;}publicHandlerBuilderbuild(){返回this.head;}}}工具处理过程publicclassLoginHandlerextendsHandlerBuilder{@Overridepublicvoidhandle(UserInfoinfo){if("eacape".equals(info.getUsername())&&"123456".equals(info.getPassword())){System.out.println("密码验证通过");super.next.handle(信息);}else{thrownewRuntimeException("账户或密码错误");}}}publicclassRoleHandlerextendsHandlerBuilder{@Overridepublicvoidhandle(UserInfoinfo){if("1".equals(info.getRole())){System.out.println("登录成功");}else{thrownewRuntimeException("无权限");}}}测试公共类ChainTest{@Testpublicvoidtest(){UserInfoinfo=newUserInfo();info.setUsername("eacape");info.setPassword("123456");info.setRole("1");HandlerBuilderbuilder=newHandlerBuilder.Builder().addHandler(newLoginHandler()).addHandler(newRoleHandler()).build();builder.handle(信息);}}======结果======密码验证通过登录成功