分类:Java

让多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。把接收对象链接起来,并且让请求在这个链条上传递,直到有对象处理它为止。

责任链UML类图
首先定义请求类,包含请假天数和请求id:
package com.sample.patterns.cor;
// 请求类
public class Request {
// 请假天数
private Integer days;
private Integer requestId;
public Request(Integer days, Integer requestId){
this.days = days;
this.requestId = requestId;
}
public Integer getDays() {
return days;
}
public void setDays(Integer days) {
this.days = days;
}
public Integer getRequestId() {
return requestId;
}
public void setRequestId(Integer requestId) {
this.requestId = requestId;
}
}
然后是抽象处理类:
package com.sample.patterns.cor;
// 抽象处理者
public abstract class Handler {
// 下一个处理者
private Handler successor;
public void setSuccessor(Handler successor) {
this.successor = successor;
}
public Handler getSuccessor(){
return this.successor;
}
public abstract void handleRequest(Request request);
}
接下来是三个具体的处理类,分别代表小组长、经理和总监的审批,另外,此处为简化起见,没有考虑是否还有下一个处理者的情况:
package com.sample.patterns.cor;
// 小组长处理
public class LeaderHandler extends Handler{
@Override
public void handleRequest(Request request) {
if(request.getDays()<=3){
System.out.println("小组长审批通过!");
}else{
getSuccessor().handleRequest(request);
}
}
}
package com.sample.patterns.cor;
// 经理处理
public class ManagerHandler extends Handler{
@Override
public void handleRequest(Request request) {
if(request.getDays()>3 && request.getDays()<=5){
System.out.println("经理审批通过!");
}else{
getSuccessor().handleRequest(request);
}
}
}
package com.sample.patterns.cor;
// 总监处理
public class DirectorHandler extends Handler{
@Override
public void handleRequest(Request request) {
if(request.getDays()>5){
System.out.println("总监审批通过");
}else{
getSuccessor().handleRequest(request);
}
}
}
最后是客户端,它定义了处理链条上的顺序,并调用第一个处理者的方法,客户端不需要也不关心具体的处理方法,以及到底经过了几个处理者:
package com.sample.patterns.cor;
public class Client {
public static void main(String[] args) {
Handler leader = new LeaderHandler();
Handler manager = new ManagerHandler();
Handler director = new DirectorHandler();
leader.setSuccessor(manager);
manager.setSuccessor(director);
Request request1 = new Request(4, 1);
leader.handleRequest(request1);
Request request2 = new Request(10, 2);
leader.handleRequest(request2);
}
}
都看到这里了,请帮忙一键三连啊,也就是点击文末的在看、点赞、分享,这样会让我的文章让更多人看到,也会大大地激励我进行更多的输出,谢谢!
鸣谢:
推荐阅读:
原文始发于微信公众号(互联网全栈架构):责无旁贷:超酷的责任链模式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/173625.html