责任链模式

1.定义

责任链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象.每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象.该模式还描述了往该处理链的末尾添加新的处理对象的方法.

维基百科-职责链模式

2.实现

职责链模式结构

  • Handler(抽象处理者)
  • ConcreteHandler(具体处理者)

Handler(抽象处理者)

/**
 * Handler(抽象处理者)
 * 满足处理的条件,则由本处理类来进行处理,否则由nextHandler来处理
 */
public abstract class Handler {

    Handler nextHandler;

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

    public abstract void handleRequest(Integer level);
}

ConcreteHandler(具体处理者)

/**
 * ConcreteHandler(具体处理者)
 */
public class ConcreteHandlerA extends Handler {

    @Override
    public void handleRequest(Integer level) {
        System.out.println("ConcreteHandlerA 接收到请求:" + level);
        if(level <= 3){
            System.out.println("ConcreteHandlerA 已处理请求");
        }else {
            if(null != nextHandler){
                nextHandler.handleRequest(level);
            }else {
                System.out.println("--没有合适的处理器--");
            }
        }
    }
}

/**
 * ConcreteHandler(具体处理者)
 */
public class ConcreteHandlerB extends Handler {

    @Override
    public void handleRequest(Integer level) {
        System.out.println("ConcreteHandlerB 接收到请求:" + level);
        if(level <= 5){
            System.out.println("ConcreteHandlerB 已处理请求");
        }else {
            if(null != nextHandler){
                nextHandler.handleRequest(level);
            }else {
                System.out.println("--没有合适的处理器--");
            }
        }
    }
}

测试客户端

public class ChainClient {

    public static void main(String[] args) {
        Handler handlerA = new ConcreteHandlerA();
        Handler handlerB = new ConcreteHandlerB();

        handlerA.setNextHandler(handlerB);
        handlerA.handleRequest(4);

        // stdout
        // ConcreteHandlerA 接收到请求:4
        // ConcreteHandlerB 接收到请求:4
        // ConcreteHandlerB 已处理请求
    }
}

results matching ""

    No results matching ""