责任链模式
责任链模式将请求在一个对象处理器链上传递,直到某个对象处理这个请求成功为止。该模式简化了请求的处理,每个对象处理器仅负责自己的单一职责,因此责任链模式也称为职责链模式。
其中Handler是一个抽象类,它有一个successor字段,该字段指向职责链下一个处理器,方法handlerRequest处理请求。看下代码实现
代码实现
Handler类
package com.lms.filterchain; /** * <p>文件描述: 责任链模式处理器</p> * * @Author luanmousheng * @Date 18/4/22 下午12:36 */ public abstract class Handler { //责任链上的下一个处理者 protected Handler successor; public void setSuccessor(Handler successor) { this.successor = successor; } public abstract void handlerRequest(int request); }
ConcreteHandler1类
package com.lms.filterchain; /** * <p>文件描述: 具体处理器1</p> * * @Author luanmousheng * @Date 18/4/22 下午1:13 */ public class ConcreteHandler1 extends Handler { public void handlerRequest(int request) { if (request < 0) { System.out.println("handler1 process < 0 request"); return; } super.successor.handlerRequest(request); } }
ConcreteHandler2类
package com.lms.filterchain; /** * <p>文件描述: 具体处理器2</p> * * @Author luanmousheng * @Date 18/4/22 下午1:16 */ public class ConcreteHandler2 extends Handler { public void handlerRequest(int request) { if (request >= 0 && request < 10) { System.out.println("handler2 process [0,10) request"); return; } super.successor.handlerRequest(request); } }
ConcreteHandler3类
package com.lms.filterchain; /** * <p>文件描述: 具体处理器3</p> * * @Author luanmousheng * @Date 18/4/22 下午1:16 */ public class ConcreteHandler3 extends Handler { public void handlerRequest(int request) { if (request >= 10) { System.out.println("handler3 process [10,) request"); return; } super.successor.handlerRequest(request); } }
FilterChainTest类
package com.lms.filterchain; public class FilterChainTest { public static void main(String[] args) { Handler handler1 = new ConcreteHandler1(); Handler handler2 = new ConcreteHandler2(); Handler handler3 = new ConcreteHandler3(); handler1.setSuccessor(handler2); handler2.setSuccessor(handler3); handler1.handlerRequest(12); } }