Chain Of Responsibility Pattern

解決的問(wèn)題

開(kāi)發(fā)一個(gè)WebServer,處理Request,處理過(guò)程包括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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容