Skip to content

Latest commit

 

History

History
109 lines (84 loc) · 3.05 KB

责任链模式.md

File metadata and controls

109 lines (84 loc) · 3.05 KB

责任链模式是一种行为设计模式,使得多个处理者能够在处理请求时形成一个链条。每个处理者都有机会处理请求,但如果当前处理者无法处理,则将请求传递给链中的下一个处理者。

责任链模式的结构

  1. Handler(处理者):定义处理请求的接口,并包含对下一个处理者的引用。
  2. ConcreteHandler(具体处理者):实现处理请求的具体逻辑,并决定是否处理请求或将其传递给下一个处理者。
  3. Client(客户端):发起请求并将请求发送到责任链的头部。

示例

假设我们有一个日志处理系统,日志可以经过不同级别的处理:InfoHandlerWarningHandlerErrorHandler

1. 定义处理者接口

abstract class Logger {
    public static int INFO = 1;
    public static int WARNING = 2;
    public static int ERROR = 3;

    protected int level;
    protected Logger nextLogger;

    public void setNextLogger(Logger nextLogger) {
        this.nextLogger = nextLogger;
    }

    public void logMessage(int level, String message) {
        if (this.level <= level) {
            write(message);
        }
        if (nextLogger != null) {
            nextLogger.logMessage(level, message);
        }
    }

    protected abstract void write(String message);
}

2. 具体处理者实现

class InfoLogger extends Logger {
    public InfoLogger() {
        this.level = Logger.INFO;
    }

    @Override
    protected void write(String message) {
        System.out.println("Info: " + message);
    }
}

class WarningLogger extends Logger {
    public WarningLogger() {
        this.level = Logger.WARNING;
    }

    @Override
    protected void write(String message) {
        System.out.println("Warning: " + message);
    }
}

class ErrorLogger extends Logger {
    public ErrorLogger() {
        this.level = Logger.ERROR;
    }

    @Override
    protected void write(String message) {
        System.out.println("Error: " + message);
    }
}

3. 客户端代码

public class ChainPatternDemo {
    public static void main(String[] args) {
        Logger infoLogger = new InfoLogger();
        Logger warningLogger = new WarningLogger();
        Logger errorLogger = new ErrorLogger();

        // 设置责任链
        infoLogger.setNextLogger(warningLogger);
        warningLogger.setNextLogger(errorLogger);

        // 发送不同级别的日志
        infoLogger.logMessage(Logger.INFO, "This is an info message.");
        infoLogger.logMessage(Logger.WARNING, "This is a warning message.");
        infoLogger.logMessage(Logger.ERROR, "This is an error message.");
    }
}

运行结果

Info: This is an info message.
Warning: This is a warning message.
Error: This is an error message.

总结

责任链模式将请求的处理者解耦,允许在运行时改变处理链的结构。通过这种方式,可以灵活添加或更换处理者,而无需修改现有的代码结构,非常适合处理可变或动态的请求处理场景。