设计模式之责任链模式
设计模式 Java About 1,922 words作用
为请求创建了一个接收者对象的链,将请求和处理分开,实现解耦,提高系统的灵活性。
简化了对象,使对象不需要知道链的结构。
原理
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
Views: 2,999 · Posted: 2020-01-07
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...