Chain Of Responsibility Pattern

解决的问题

开发一个WebServer,处理Request,处理过程包括Authenticate、Compress和Log步骤。要求可以自由添加或者移除步骤。

代码

Handler:

package com.cong.designpattern.chainOfResponsibility;

public abstract class Handler {
    private Handler next;
    public Handler(Handler next) {
        this.next = next;
    }
    public void handle(Request request) {
        if (!doHandle(request)) return;

        if (this.next != null) this.next.handle(request);
    }
    protected abstract boolean doHandle(Request request);
}

WebServer:

package com.cong.designpattern.chainOfResponsibility;

public class WebServer {
    private Handler handler;
    public WebServer(Handler handler) {
        this.handler = handler;
    }
    public void handleRequest(Request request) {
        this.handler.handle(request);
    }
}

Request:

package com.cong.designpattern.chainOfResponsibility;

public class Request {
    public String account;
    public String password;
    public Request(String account, String password) {
        this.account = account;
        this.password = password;
    }
}

Authenticator:

package com.cong.designpattern.chainOfResponsibility;

public class Authenticator extends Handler {
    public Authenticator(Handler next) {
        super(next);
    }
    @Override
    protected boolean doHandle(Request request) {
        System.out.println("Authentication");
        return request.account.equals("a") && request.password.equals("1234");
    }
}

Compressor:

package com.cong.designpattern.chainOfResponsibility;

public class Compressor extends Handler {
    public Compressor(Handler next) {
        super(next);
    }
    @Override
    protected boolean doHandle(Request request) {
        System.out.println("Compress");
        return true;
    }
}

Logger:

package com.cong.designpattern.chainOfResponsibility;

public class Logger extends Handler{
    public Logger(Handler next) {
        super(next);
    }
    @Override
    protected boolean doHandle(Request request) {
        System.out.println("Log");
        return true;
    }
}

Test code:

// authenticator -> compressor -> logger
Logger logger = new Logger(null);
Compressor compressor = new Compressor(logger);
Authenticator authenticator = new Authenticator(compressor);

WebServer webServer = new WebServer(authenticator);
Request request = new Request("a", "1234");
webServer.handleRequest(request);

UML

Chain Of Responsibility Pattern UML
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容