Chain of Responsibility Model--Behavior Model

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:

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324665411&siteId=291194637