设计模式之责任链模式
设计模式 Java 大约 1922 字作用
为请求创建了一个接收者对象的链,将请求和处理分开,实现解耦,提高系统的灵活性。
简化了对象,使对象不需要知道链的结构。
原理
Handler:抽象的处理者,定义了一个处理请求的接口,同时含有下一个Handler。
ConcreteHandlerA/B:具体的处理者,处理它自己负责的请求,可以访问它的下一个处理者,如果可以处理当前请求,则处理,否则就将该请求交给下一个处理者去处理,从而形成一个责任链。
Request:含有多个属性,表示一个请求。
案例
Handler
public abstract class Approver {
Approver nextApprover;
public void setNextApprover(Approver nextApprover) {
this.nextApprover = nextApprover;
}
public abstract void processRequest(Request request);
}
ConcreteHandler
public class JuniorApprover extends Approver {
@Override
public void processRequest(Request request) {
if (request.price <= 100) {
System.out.println("<= 100 junior 处理");
} else {
setNextApprover(new SeniorApprover());
nextApprover.processRequest(request);
}
}
}
public class SeniorApprover extends Approver {
@Override
public void processRequest(Request request) {
if (request.price <= 200) {
System.out.println("<= 200 senior 处理");
} else {
setNextApprover(new SuperiorApprover());
nextApprover.processRequest(request);
}
}
}
public class SuperiorApprover extends Approver {
@Override
public void processRequest(Request request) {
if (request.price > 200) {
System.out.println("> 200 superior 处理");
} else {
setNextApprover(new JuniorApprover());
nextApprover.processRequest(request);
}
}
}
Request
public class Request {
int price;
}
调用
public class Client {
public static void main(String[] args) {
Request request = new Request();
request.price = 250;
Approver approver = new JuniorApprover();
approver.processRequest(request);
}
}
源码
org.springframework.web.servlet.DispatcherServlet#doDispatch
org.springframework.web.servlet.HandlerExecutionChain
阅读 1322 · 发布于 2020-01-07
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Kubernetes Ingress 控制器 Nginx阅读 186
-
Android ListView 隐藏分割线阅读 1246
-
OpenResty 使用 lua-resty-upload 上传文件阅读 901
-
软考各科目介绍阅读 909
-
算法:解析中缀表达式阅读 519
-
为什么匿名内部类引用外部局部变量必须要加 final 关键字阅读 26
-
Linux xxx is not in the sudoers file.This incident will be reported阅读 1540
-
Linux zgrep,zcat,zless,zmore 等 zutil 包命令阅读 2758
-
Ubuntu 修改 apt 镜像阅读 1073
-
Android 使用 CountDownTimer 类进行倒计时阅读 954