0
点赞
收藏
分享

微信扫一扫

【设计模式】责任链模式(行为型)⭐⭐

文章目录

1.概念

1.1 什么是责任链模式

1.2 优点与缺点

优点:
1.降低请求的发送者和接收者之间的耦合关系。
2.请求的发送者不需要知道链中的具体结构。
3.可以动态地添加或修改处理者。
缺点:
1.请求可能在链中得不到处理,需要有机制保证请求被正确处理。
2.系统性能问题,因为请求可能需要在链中传递多次。

2.实现方式

// 抽象处理者接口
public interface Handler {
    void setNext(Handler handler);

    void handleRequest(int request);
}

// 具体处理者实现
public class ConcreteHandler1 implements Handler {
    private Handler nextHandler;

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

    public void handleRequest(int request) {
        if (request >= 0 && request < 10) {
            System.out.println("ConcreteHandler1 handled the request " + request);
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        }
    }
}

public class ConcreteHandler2 implements Handler {
    private Handler nextHandler;

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

    public void handleRequest(int request) {
        if (request >= 10 && request < 20) {
            System.out.println("ConcreteHandler2 handled the request " + request);
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        }
    }
}

public class ConcreteHandler3 implements Handler {
    private Handler nextHandler;

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

    public void handleRequest(int request) {
        if (request >= 20 && request < 30) {
            System.out.println("ConcreteHandler3 handled the request " + request);
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        }
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();
        Handler handler3 = new ConcreteHandler3();

        handler1.setNext(handler2);
        handler2.setNext(handler3);

        // 发送请求
        handler1.handleRequest(5);  // 应该由 ConcreteHandler1 处理
        handler1.handleRequest(15); // 应该由 ConcreteHandler2 处理
        handler1.handleRequest(25); // 应该由 ConcreteHandler3 处理
    }
}

3. Java 哪些地方用到了责任链模式

4. Spring 哪些地方用到了责任链模式

举报

相关推荐

0 条评论