责任链模式

概念

责任链模式是为一个请求创建一条处理者调用链,在该链中,处理者保存下一个处理者的引用。当一个处理者不能执行该请求的时候,它会把请求交给下一个下一个处理者,如此类推。

优点

  • 请求和处理两个处理相互解耦。
  • 可以动态的添加处理者。

缺点

  • 请求到链表最后,都没有处理者能处理。
  • 可能导致循环引用。

UML图

Handler(抽象处理者):定义一个处理请求的接口

ActuallyHandlerN(实际处理者):实现处理请求的接口。

部分代码部分:

Handler:

public abstract class Handler {

    protected Handler nextHandler; // 下一个责任链成员

    public Handler getNextHandler() {
        return nextHandler;
    }

    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    // 处理传递过来的时间
    public abstract void HandleRequest(int type);
}

ActuallyHandlerN:

public class ActuallyHandler1 extends Handler {

    @Override
    public void HandleRequest(int type) {
        if (type == 1) {
            System.out.println("ActuallyHandler1解决了问题!");
        } else {
            System.out.println("ActuallyHandler1解决不了问题......");
            if (nextHandler != null) {
                nextHandler.handleMessage(type);
            } else {
                System.out.println("没有人能处理这个消息");
            }
        }
    }
}

public class ActuallyHandler2 extends Handler {

    @Override
    public void HandleRequest(int type) {
        if (type == 2) {
            System.out.println("ActuallyHandler2解决了问题!");
        } else {
            System.out.println("ActuallyHandler2解决不了问题......");
            if (nextHandler != null) {
                nextHandler.handleMessage(type);
            } else {
                System.out.println("没有人能处理这个消息");
            }
        }
    }
}

public class ActuallyHandler3 extends Handler {

    @Override
    public void HandleRequest(int type) {
        if (type == 3) {
            System.out.println("ActuallyHandler3解决了问题!");
        } else {
            System.out.println("ActuallyHandler3解决不了问题......");
            if (nextHandler != null) {
                nextHandler.handleMessage(type);
            } else {
                System.out.println("没有人能处理这个消息");
            }
        }
    }
}
原文地址:https://www.cnblogs.com/zitai/p/13813330.html