设计模式-责任链模式
责任链模式
 属于:行为型模式
 请求与处理解耦,请求可以按照需求自动选择处理函数,避免请求者与发送者耦合在一起,让多个对象都有可能接收请求,将对象连成一条链。
 常用场景
 不同的请求需要不同权限的对象来处理的情况
 优点:
 降低耦合度,将请求的发送者和接收者解耦。
 简化了对象,使得对象不需要知道链的结构。
 增加新的具体处理者很方便,无须修改原有代码,只需要在客户端重新建链即可。
 缺点:
 性能问题,每个请求都从头到尾遍历。
 如果建链不当,可能会造成循环调用,这将导致系统陷入死循环
 请假条
 public class LeaveRequest {private int day;}
 处理方抽象
 public abstract class HanderRequest{private int maxDay;pirvate HanderRequest nextPerson;
 public void HanderRequest(int maxDay,HanderRequest nextPerson){this.maxDay = maxDay;this.nextPerson = nextPerson};
 public abstract void handerLeaveRequest(LeaveRequest leaveRequest);}
 处理方具体
 public class GroupLeader extends HanderRequest{
 public GroupLeader(int maxDay,HanderRequest nextPerson){super(maxDay,nextPerson)};
 public void handerLeaveRequest(LeaveRequest leaveRequest){if(leaveRequest.day <= this.maxDay){} else{this.nextPerson.handerLeaveRequest(leaveRequest);};};}
 public class ProjectLeader extends HanderRequest{
 public ProjectLeader(int maxDay,HanderRequest nextPerson){super(maxDay,nextPerson);};
 public void handerLeaveRequest(LeaveRequest leaveRequest){if(leaveRequest.day<=this.maxDay){}
 else{this.nextPerson.handerLeaveRequest(leaveRequest);};};}
 调用
 ProjectLeader projectLeader = new ProjectLeader(5,null);
 GroupLeader groupLeader = new GroupLeader(1,projectLeader);
 LeaveRequest leaveRequest = new LeaveRequest(10);
 groupLeader.handerLeaveRequest(leaveRequest);
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!