这个模式看起来比较简单,我们在JavaEE开发中常见的Filter就是使用到了责任链模式
Handler抽象类
public abstract class Handler { /** * 后继的责任对象 */ protected Handler successor; /** * 具体处理方法 */ public abstract void handleRequest(); /** * 取值方法 * @return */ public Handler getSuccessor() { return successor; } public void setSuccessor(Handler successor) { this.successor = successor; } }
具体处理类
public class ConcreteHandler extends Handler{ @Override public void handleRequest() { // do something // 此处可自定义逻辑,决定是否交给下一个Handler处理 System.out.println("具体处理....."); if (getSuccessor() != null) { successor.handleRequest(); } } }
客户端,自由组装过滤顺序
public class Client { public static void main(String[] args) { // 组装责任链 Handler handler1 = new ConcreteHandler(); Handler handler2 = new ConcreteHandler(); handler1.setSuccessor(handler2); // 开始执行责任链 handler1.handleRequest(); } }
就像Filter一样,我们可以将具体业务处理都配置在xml中,这时候,如果要对责任链的顺序进行变更,就方便很多了。