责任链模式-- Java demo实践

363 阅读1分钟

首先,我们定义一个请求处理器接口,它有一个处理请求的方法:

javaCopy code
public interface RequestHandler {
    void handleRequest(Request request);
}

接下来,我们实现两个请求处理器类:AuthenticationHandlerAuthorizationHandler。这些处理器将根据请求的类型来判断是否能够处理请求,如果不能处理请求,则将其传递给下一个处理器。在我们的示例中,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
        
        }
   }