The applicable scenarios are as follows:
The interceptor in springmvc uses the chain of responsibility pattern
The UML diagram is as follows:
Among them, the most critical handle class
code show as below:
public abstract class Handle {
protected String name;
protected Handle nextHandle;
public void setName(String name) {
this.name = name;
}
public void setNextHandle(Handle nextHandle) {
this.nextHandle = nextHandle;
}
protected abstract void hand(HandRequest request);
protected abstract boolean isHand(HandRequest request);
protected void handFun(HandRequest request){
if(this.isHand(request)){
this.hand(request);
}else {
System.out.println(this.name+"处理不了,让"+nextHandle.name+"处理");
nextHandle.handFun(request);
}
}
}
Class AHandle
public class AHandle extends Handle { @Override protected void hand(HandRequest request) { System.out.println( "I am A, processing: "+ request.getDay()); } @Override protected boolean isHand(HandRequest request) { if(request.getDay()>10){ return false; } return true; } }
Client class call
public static void main(String[] args) {
Handle aHandle = new AHandle();
aHandle.setName("a");
Handle bHandle = new BHandle();
bHandle.setName("b");
Handle cHandle = new CHandle();
cHandle.setName("c");
//构件责任链
aHandle.setNextHandle(bHandle);
bHandle.setNextHandle(cHandle);
//处理A
HandRequest handRequestA = new HandRequest(1);
aHandle.handFun(handRequestA);
System.out.println("=========================");
//处理B
HandRequest handRequestB = new HandRequest(11);
aHandle.handFun(handRequestB);
System.out.println("=========================");
// handle C
HandRequest handRequestC = new HandRequest(111);
aHandle.handFun(handRequestC);
The result is as follows: