首先,我们定义一个请求处理器接口,它有一个处理请求的方法:
javaCopy code
public interface RequestHandler {
void handleRequest(Request request);
}
接下来,我们实现两个请求处理器类:AuthenticationHandler和AuthorizationHandler。这些处理器将根据请求的类型来判断是否能够处理请求,如果不能处理请求,则将其传递给下一个处理器。在我们的示例中,AuthenticationHandler处理身份验证请求,AuthorizationHandler处理授权请求。
javaCopy code
public class AuthenticationHandler implements RequestHandler {
@Override
public void handleRequest(Request request) {
if (request.getType() == RequestType.AUTHENTICATION) {
System.out.println("Handling authentication request...");
} else {
System.out.println("Passing request to next handler...");
getNextHandler().handleRequest(request);
}
}
private RequestHandler nextHandler;
public void setNextHandler(RequestHandler handler) {
this.nextHandler = handler;
}
public RequestHandler getNextHandler() {
return this.nextHandler;
}
}
public class AuthorizationHandler implements RequestHandler {
@Override
public void handleRequest(Request request) {
if (request.getType() == RequestType.AUTHORIZATION) {
System.out.println("Handling authorization request...");
} else {
System.out.println("Passing request to next handler...");
getNextHandler().handleRequest(request);
}
}
private RequestHandler nextHandler;
public void setNextHandler(RequestHandler handler) {
this.nextHandler = handler;
}
public RequestHandler getNextHandler() {
return this.nextHandler;
}
}
注意,这些处理器类都有一个nextHandler字段,它用于指向下一个处理器。这个字段将在工厂类中设置。
现在,我们实现一个工厂类RequestHandlerFactory,用于创建和连接请求处理器。在这个工厂类中,我们创建了两个请求处理器,并使用setNextHandler方法将它们连接在一起。
javaCopy code
public class RequestHandlerFactory {
public static RequestHandler createHandlerChain() {
RequestHandler authenticationHandler = new AuthenticationHandler();
RequestHandler authorizationHandler = new AuthorizationHandler();
authenticationHandler.setNextHandler(authorizationHandler);
return authenticationHandler;
}
}
最后,我们可以创建一个简单的Request类,它只有一个类型字段:
javaCopy code
public enum RequestType {
AUTHENTICATION,
AUTHORIZATION
}
public class Request {
private RequestType type;
public Request(RequestType type) {
this.type = type;
}
public RequestType getType() {
return this.type;
}
}
现在我们可以使用这些类来处理请求。在主方法中,我们首先创建一个RequestHandler对象,然后创建一些请求并将它们传递给handleRequest方法:
javaCopy code
public class Main {
public static void main(String[] args) {
RequestHandler handlerChain = RequestHandlerFactory.createHandlerChain();
Request authenticationRequest = new Request(RequestType.AUTHENTICATION);
Request authorizationRequest = new Request(RequestType.AUTHORIZATION);
Request unknownRequest = new Request(null);
handlerChain.handleRequest(authenticationRequest);
handlerChain.handleRequest(authorizationRequest
}
}