做h网站,重庆在线,什么网站能买建设摩托车,灵芝住房和城乡建设局局网站当一个请求需要在多个对象之间传递#xff0c;每个对象都可能处理该请求或将其传递给下一个对象。在这种情况下#xff0c;需要避免将发送者与接收者之间的耦合#xff0c;以及确定请求的处理方式。此时可使用责任链模式#xff0c;它的优点有降低耦合度#xff08;无需关…当一个请求需要在多个对象之间传递每个对象都可能处理该请求或将其传递给下一个对象。在这种情况下需要避免将发送者与接收者之间的耦合以及确定请求的处理方式。此时可使用责任链模式它的优点有降低耦合度无需关心哪个对象会处理请求灵活性可以动态地改变它们之间的顺序和职责可扩展性添加新的处理者而不会影响现有代码可维护性处理者之间职责分开便于维护责任链模式也有限制比如可能导致请求无法被处理或者处理链太长而导致性能问题。
一、抽象类方式实现 假定一个权限认证的例子
/*** 成员类*/
Getter
ToString
public class Member {private String loginName;private String loginPass;Setterprivate String roleName;public Member(String loginName, String loginPass) {this.loginName loginName;this.loginPass loginPass;}
}/*** 抽象处理者*/
public abstract class Handler {protected Handler handler;public void next(Handler handler) {this.handler handler;}public abstract void doHandler(Member member);
}/*** 认证处理器*/
public class AuthHandler extends Handler {Overridepublic void doHandler(Member member) {if (!管理员.equals(member.getRoleName())) {System.out.println(无操作权限!);return;}System.out.println(操作成功管理员同志);}
}/*** 登陆处理器*/
public class LoginHandler extends Handler {Overridepublic void doHandler(Member member) {System.out.println(登陆成功!);member.setRoleName(管理员);handler.doHandler(member);}
}/*** 校验数据处理器*/
public class ValidDataHandler extends Handler {Overridepublic void doHandler(Member member) {if (StringUtils.isBlank(member.getLoginName()) || StringUtils.isBlank(member.getLoginPass())) {System.out.println(用户名或密码不能为空!);return;}System.out.println(验证通过!);handler.doHandler(member);}
}/*** 业务服务类*/
public class MemberService {public void login(String loginName, String loginPass) {Handler validDateHandler new ValidDataHandler();Handler loginHandler new LoginHandler();Handler authHandler new AuthHandler();validDateHandler.next(loginHandler);loginHandler.next(authHandler);validDateHandler.doHandler(new Member(loginName, loginPass));}}
编写测试用例 /*** 责任链模式-权限认证测试*/Testpublic void testPermission() {MemberService memberService new MemberService();memberService.login(admin, 123456);}二、与建造者模式相结合
还是权限认证的例子
/*** 抽象处理者结合建造者模式*/
public abstract class HandlerUp {protected HandlerUp handler;public void next(HandlerUp handler) {this.handler handler;}public abstract void doHandler(Member member);public static class Builder {private HandlerUp head;private HandlerUp tail;public Builder addHandler(HandlerUp handler) {if (this.head null) {this.head this.tail handler;return this;}this.tail.next(handler);this.tail handler;return this;}public HandlerUp build() {return this.head;}}
}/*** 认证处理器*/
public class AuthHandlerUp extends HandlerUp {Overridepublic void doHandler(Member member) {if (!管理员.equals(member.getRoleName())) {System.out.println(非管理员无操作权限!);return;}System.out.println(操作成功管理员同志);}
}/*** 登陆处理器*/
public class LoginHandlerUp extends HandlerUp {Overridepublic void doHandler(Member member) {System.out.println(登陆成功!);member.setRoleName(管理员);handler.doHandler(member);}
}/*** 校验数据处理器*/
public class ValidDataHandlerUp extends HandlerUp {Overridepublic void doHandler(Member member) {if (StringUtils.isBlank(member.getLoginName()) || StringUtils.isBlank(member.getLoginPass())) {System.out.println(用户名或密码不能为空!);return;}System.out.println(用户名和密码校验成功!);handler.doHandler(member);}
}/*** 业务服务类*/
public class MemberServiceUp {public void login(String loginName, String loginPass) {new HandlerUp.Builder().addHandler(new ValidDataHandlerUp()).addHandler(new LoginHandlerUp()).addHandler(new AuthHandlerUp()).build().doHandler(new Member(loginName, loginPass));}}编写测试用例 /*** 责任链模式-权限认证增强版测试*/Testpublic void testPermissionUp() {MemberServiceUp memberServiceUp new MemberServiceUp();memberServiceUp.login(admin, 123456);}