お待ちください...

小波Note

四川 · 成都市14 ℃
日本語

Java Chain-Of-Responsibility

成都 (cheng du)2024/8/26 18:21:232.06k見積もり読書時間 6 分お気に入りCtrl + D / ⌘ + D
cover
IT FB(up 主)
バックエンド開発エンジニア

Chain of Responsibility パターンは、複数のオブジェクトがリクエストを処理する機会を持つことができるようにする、振る舞いのデザインパターンです。これらのオブジェクトは連鎖され、リクエストを連鎖に沿って渡し、オブジェクトがそれを処理するまでリクエストを渡します。

定义处理器抽象类

java
        public abstract class Handler {
    protected Handler nextHandler;

    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    public void handleRequest(String request) {
        if (nextHandler != null) {
            nextHandler.handleRequest(request);
        }
    }
}

    

实现具体处理器

java
        public class ConcreteHandlerA extends Handler {
    @Override
    public void handleRequest(String request) {
        if (request.equals("A")) {
            System.out.println("ConcreteHandlerA handled request: " + request);
        } else {
            super.handleRequest(request);
        }
    }
}

public class ConcreteHandlerB extends Handler {
    @Override
    public void handleRequest(String request) {
        if (request.equals("B")) {
            System.out.println("ConcreteHandlerB handled request: " + request);
        } else {
            super.handleRequest(request);
        }
    }
}

public class ConcreteHandlerC extends Handler {
    @Override
    public void handleRequest(String request) {
        if (request.equals("C")) {
            System.out.println("ConcreteHandlerC handled request: " + request);
        } else {
            super.handleRequest(request);
        }
    }
}

    

使用责任链模式

java
        public class ChainOfResponsibilityPatternDemo {
    public static void main(String[] args) {
        // 创建处理器
        Handler handlerA = new ConcreteHandlerA();
        Handler handlerB = new ConcreteHandlerB();
        Handler handlerC = new ConcreteHandlerC();

        // 设置责任链
        handlerA.setNextHandler(handlerB);
        handlerB.setNextHandler(handlerC);

        // 处理请求
        handlerA.handleRequest("A");
        handlerA.handleRequest("B");
        handlerA.handleRequest("C");
        handlerA.handleRequest("D");
    }
}