import java.util.ArrayList; import java.util.List; // 请求处理接口 interface HttpRequestHandler { void handle(HttpRequest request); } // 基础处理器 class CoreHandler implements HttpRequestHandler { public void handle(HttpRequest request) { System.out.println("Core processing: " + request.getPath()); } } // 装饰器抽象类 abstract class MiddlewareDecorator implements HttpRequestHandler { protected HttpRequestHandler nextHandler; public MiddlewareDecorator(HttpRequestHandler handler) { this.nextHandler = handler; } } // 具体装饰器实现 class AuthMiddleware extends MiddlewareDecorator { public AuthMiddleware(HttpRequestHandler handler) { super(handler); } public void handle(HttpRequest request) { if (!request.getHeaders().containsKey("Authorization")) { throw new SecurityException("Unauthorized"); } nextHandler.handle(request); } } class LoggingMiddleware extends MiddlewareDecorator { public LoggingMiddleware(HttpRequestHandler handler) { super(handler); } public void handle(HttpRequest request) { System.out.println("Request logged: " + request.getMethod()); nextHandler.handle(request); } } // 请求对象 class HttpRequest { private String method; private String path; private List headers = new ArrayList<>(); public HttpRequest(String method, String path) { this.method = method; this.path = path; } public void addHeader(String header) { headers.add(header); } // getters... } // 管道构建器 class MiddlewarePipeline { private HttpRequestHandler pipeline; public void addMiddleware(HttpRequestHandler middleware) { if (pipeline == null) { pipeline = middleware; } else { // 找到最后一个处理器并添加新装饰器 HttpRequestHandler current = pipeline; while (current instanceof MiddlewareDecorator) { MiddlewareDecorator decorator = (MiddlewareDecorator) current; if (decorator.nextHandler == null) { decorator.nextHandler = middleware; break; } current = decorator.nextHandler; } } } public void execute(HttpRequest request) { if (pipeline != null) { pipeline.handle(request); } } } // 客户端使用 public class ChallengeMiddlewarePipeline { public static void main(String[] args) { MiddlewarePipeline pipeline = new MiddlewarePipeline(); // 构建处理链(顺序重要) pipeline.addMiddleware(new LoggingMiddleware(null)); pipeline.addMiddleware(new AuthMiddleware(new CoreHandler())); // 执行请求 HttpRequest request = new HttpRequest("GET", "/api/data"); request.addHeader("Authorization: Bearer token123"); pipeline.execute(request); } }