责任链模式

这个模式看起来比较简单,我们在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中,这时候,如果要对责任链的顺序进行变更,就方便很多了。