责任链通常需要先建立一个单向链表,然后调用方只需要调用头部节点就可以了,后面会自动流转下去。比如流程审批就是一个很好的例子,只要终端用户提交申请,根据申请的内容信息,自动建立一条责任链,然后就可以开始流转了
定义抽象处理对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public abstract class AbstractHander {
protected AbstractHander nextHandler;
public abstract void handle(int days);
public void setNextHandler(AbstractHander nextHandler) { this.nextHandler = nextHandler; } }
|
定义具体处理对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| public class HandlerA extends AbstractHander {
@Override public void handle(int days) {
if(days < 5){ System.out.println("**条件符合,由A自己处理这个请求"); }else{ System.out.println("##条件不符合,由A转发这个请求到下一个处理者"); if(nextHandler != null){ nextHandler.handle(days); } }
} } public class HandlerB extends AbstractHander {
@Override public void handle(int days) {
if(days < 10){ System.out.println("**条件符合,由B自己处理这个请求"); }else{ System.out.println("##条件不符合,由B转发这个请求到下一个处理者"); if(nextHandler != null){ nextHandler.handle(days); } }
} } public class HandlerC extends AbstractHander {
@Override public void handle(int days) { if(days < 15){ System.out.println("**条件符合,由C自己处理这个请求"); }else{ System.out.println("##条件不符合,由C转发这个请求到下一个处理者"); if(nextHandler != null){ nextHandler.handle(days); } } } }
|
测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public static void main(String[] args) { HandlerA handlerA = new HandlerA(); HandlerB handlerB = new HandlerB(); HandlerC handlerC = new HandlerC(); handlerA.setNextHandler(handlerB); handlerB.setNextHandler(handlerC); handlerA.handle(13); } 输出 ##条件不符合,由A转发这个请求到下一个处理者 ##条件不符合,由B转发这个请求到下一个处理者 **条件符合,由C自己处理这个请求
|