首页 微博热点正文

二的成语,Java描绘规划形式(15):职责链形式,处理常见批阅流事务,狼王梦

本文源码GitHub || GitEE

一、日子场景描绘

1、请假阅览流程

公司常见的请假阅览流程:请假天数

当 day<=3 天,项目经理阅览
当 3 < day <=5 天,部门经理阅览
当 day > 5 天,CEO阅览

2、流程图解

3、代码完成

public class C01_InScene {
public static void main(String[] args) {
// 拼装责任链
AuditHandler h1 = new CeoManger();
AuditHandler h2 = new DeptManger();
AuditHandler h3 = new ProjectManger();
h3.setSuccessor(h2);
h2.setSuccessor(h1);
/*
* 测验输出
* 项目经理无权江苏吴江天气预报阅览
* 部门经理无权阅览
* CEO阅览:赞同【Cicada】,请假【6】天
*/
h3.handleLeaveDay("Cicada",6);
}
}
abstract class AuditHandler {
//持有下一个处理恳求的目标
protected AuditHandler successor = null;
public AuditHandler getSuccessor() {
return successor;
}
public void setSuccessor(AuditHandler successor) {
this.successor = successor;
}
public abstract void handleLeaveDay (String user,Integer day);
}
/**
* 项目经理阅览
*/
class Projec二的成语,Java描绘规划方式(15):责任链方式,处理常见阅览流业务,狼王梦tManger extends AuditHandler{
@Override
public void handleLeaveDay(String user, Integer day) {
if (day <= 3){
System.out.println("项目经理阅览:赞同【"+user+"】,请假【"+day+"】天");
} else {
System.out.println("项目经理无权阅览");
if (getSuccessor() != null){
getSuccessor().鹿关同寝h傅西来andleLeave二的成语,Java描绘规划方式(15):责任链方式,处理常见阅览流业务,狼王梦Day(user,day);
}
}
}
}
/**
* 部门经理阅览
*/
class DeptManger extends Aud官少诱娶小萌妻itHandler{
@Override
public void handleLeaveDay(String user, Integer day) {
if (day > 3 && day <= 5){
System.out.println("部门经理阅览:赞同【"+user+"】,请假【"+day+"】天");
} else {
System.out.println("部门经理无权阅览");
if (getSuccessor() != null){
getSuccessor().handleLeaveDay(user,day);
}
}
}
}
/**
* CEO阅览
*/
class CeoManger extends AuditHandler{
@Override
public vxbet星投oid handleLeaveDay(String user, Integer day) {
if (day > 5){
System.out.println("CEO阅览:赞同【"+user+"】,请假【"+day+"】天");
} else {
if (getSuccessor() != null){
getSuccessor().handleLeaveDay(user,day)秦书培;
}
}
}
}

二、责任链方式

1、根底概念

责任链方式是一种目标的行为方式。在责任链方式里,许多目标由每一个目标对其下个的引证而连接起来构成一条链式结构。恳求在这个链上传递,直到链上陨落异星的某一个目标有权处理该恳求。恳求的客户端不知道链上的哪个目标处理该恳求,这使得体系能够在不影响客户端的情况下动态地重新组织和分配责任目标。

2、中心人物

(1)、笼统处理者人物 界说处理恳求的接口。接口能够也能够给出一个办法以设定和回来对下个目标引证。这个人物一般由一个Jav二的成语,Java描绘规划方式(15):责任链方式,处理常见阅览流业务,狼王梦a笼统类或许Java接口完成。

(2)、详细处理者人物 详细处理者接到恳求后,能够挑选将恳求处理掉,或许将恳求传给下个目标。因为详细处理者持有对下家的引证。

3、方式图解

4、源代码完成

public class C02_Chain {
public static void main(String[] args) {
// 拼装责任链
Handler handler1 = new ConcreteHandler();
H李承孝andler handler2 = new ConcreteHandler();
handler1.setHandler(handler2);
// 提交恳求
handler1.handlerRequest();
}
}
/**
* 笼统处理者人物
*丝弦李天宝吊孝全集/
abstract cyl恩恩lass Handler {
/*
* 持有后续的责任目标
*/
protected Handler handler;
/**
* 处理恳求的沃金汇办法
*/
public abstract void handlerRequest();
public Handler getHandler() {
return handler;
}
public void setHandler(Handler handler) {
this.handler = handler;
}
}
/**
* 详细处理者人物
*/
class ConcreteHandler extends Handler{
/**
* 调用该办法处理恳求
*/
@Override
public void handlerRequest() {
/*
* 判别是否有后续的责任目标,没有就出来恳求,有就直接放过
*/
if(getHandler() != null){
System.out.println("放过恳求,下个目标处理...");
getHandler().handlerRequest();
} else{
System.out.println("直接处理初中女生视频恳求了...");
}
}
}

三、Spring结构使用

1、DispatcherServlet类

Dispatch二的成语,Java描绘规划方式(15):责任链方式,处理常见阅览流业务,狼王梦erServlet 中心办法 doDispatch。HandlerExecutionChain仅仅保护HandlerInterceptor的调集,能够向其间注册相应的拦针惜打针截器,自身不直接处理恳求,将恳求分配给责任链上注册处理器履行,下降责任链自身与处理逻辑之间的耦合程度。

HandlerExecutionChain mappedHandler = null;
mappedHandler = this.getHandler(processedRequest);
mappedHandler.applyPreHandle(processedRequest, response);
mappedHandler.applyPostHandle(processedRequest, response, mv);

2、HandlerExecutionChain类

这儿剖析的几个办法,都是从DispatcherServlet类的doDispatch办法中恳求的。

  • 获取拦截器,履行preHandle办法。
boolean applyPreHandle(HttpServletRequest 打码量是什么意思request, 
HttpServletResponse response) throws Exception {
Ha诱人的ndlerInterceptor[] interceptors = this.getInterceptors();
if (!ObjectUtils.isEmpty(interceptors)) {
for(int i = 0; i < interceptors.length; this.interceptorIndex = i++) {
HandlerInterceptor interceptor = interceptors[i];
if (!intercepto西斯卡r.preHandle(request, response, this.handler)) {
this.triggerAfterCompletion(request, response, (Exception)null);
return false;
}
}
}
return true;
}
  • 在applyPreHandle办法中,履行triggerAfterCompletion办法。
void triggerAfterCompletion(HttpServletRequest request, 
HttpServletResponse response, E金卡达夏xception ex) throws Exception {
HandlerInterceptor[] interceptors = this.getI高仁彬nterceptors();
if (!ObjectUtils.isEmpty(interceptors)) {
for(int i = this.interceptorIndex; i >= 0; --i) {
HandlerInterceptor interceptor = interceptors[i];
try {
interceptor.afterCompletion(request, response, this.handler, ex);
} catch (Throwable 二的成语,Java描绘规划方式(15):责任链方式,处理常见阅览流业务,狼王梦var8) {
logger.error("HandlerInterceptor.afterCompletion threw exception", var8);
}
}
}
}
  • 获取拦截器,履行applyPostHandle办法。
void applyPo二的成语,Java描绘规划方式(15):责任链方式,处理常见阅览流业务,狼王梦stHandle(HttpServletRequest request, 
HttpServletResponse response, M千德溢宝odelAndView mv)
throws Exception {
HandlerInterceptor[] interceptors = this.getInterceptors();
if (!ObjectUtils.isEmpty(interceptors)) {
for(int i = interceptors.length - 1; i >= 0; --i) {
HandlerInterceptor interceptor = interceptors[i];
interceptor.postHandle(request, response, this.handler, mv);
}
}
}

四、方式总结

(1)、将恳求和处理逻辑分隔,完成解耦进步体系的灵活性;
(2)、当责任链过长时,功能会下降,测验也会变得复杂;
(3)、使用场景:请假、加薪、费用等常见的阅览流程;

引荐相关阅览:

Java描绘规划方式:观察者方式

Java描绘规划方式:装修方式

J二的成语,Java描绘规划方式(15):责任链方式,处理常见阅览流业务,狼王梦ava描绘规划方式:组合方式

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。