java设计模式 -【责任链模式】
责任链模式定义
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,允许将请求沿着处理链传递,直到有一个处理者能够处理该请求。这种模式解耦了请求的发送者和接收者,允许多个对象有机会处理请求,责任链模式通过分离请求和处理逻辑,提供了一种灵活的任务分配机制,适用于需要动态指定处理对象的场景。
核心组件
Handler(抽象处理者)
定义处理请求的接口,通常包含一个指向下一个处理者的引用(后继者)
public abstract class Handler {protected Handler successor;public void setSuccessor(Handler successor) {this.successor = successor;}public abstract void handleRequest(Request request);
}
ConcreteHandler(具体处理者)
实现抽象处理者的接口,决定是否处理请求或将其传递给链中的下一个处理者
public class ConcreteHandlerA extends Handler {@Overridepublic void handleRequest(Request request) {if (request.getType().equals("TypeA")) {// 处理请求} else if (successor != null) {successor.handleRequest(request);}}
}
Request(请求)
封装请求的细节,通常包含处理所需的参数或类型
public class Request {private String type;// 其他字段及方法
}
典型应用场景
多级审批流程:如请假审批需经过部门经理、HR、CEO等层级。
事件处理系统:如GUI中的事件冒泡机制。
日志过滤:不同级别的日志(DEBUG、INFO、ERROR)由不同处理器处理。
示例代码
以下是一个简单责任链实现:
// 抽象处理者
abstract class Logger {public static int INFO = 1;public static int DEBUG = 2;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);}}abstract protected void write(String message);
}// 具体处理者
class ConsoleLogger extends Logger {public ConsoleLogger(int level) {this.level = level;}@Overrideprotected void write(String message) {System.out.println("Console: " + message);}
}