0
点赞
收藏
分享

微信扫一扫

可灵开源视频生成数据集 学习笔记

Spring 设计模式之责任链模式

责任链模式

责任链模式(Chain of Responsibility)是一种行为设计模式,它允许你将请求沿着处理者链进行传递。
每个处理者可以对请求进行处理,也可以将请求传递给链中的下一个处理者。这个模式使得你可以在不修改对象间连接的情况下,动态地增加或删除责任。

用到的场景

强调链条传递,每一个环节都处理一下

java举例

package com.example.customer.controller;

// 定义一个处理请求的接口
interface Handler {
    // 设置下一个处理者
    void setNextHandler(Handler nextHandler);

    // 处理请求的方法
    void handleRequest(int days);
}

// 具体的处理者类,比如部门经理,实现Handler接口
class DepartmentManager implements Handler {
    private Handler nextHandler;

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

    @Override
    public void handleRequest(int days) {
        if (days <= 5) {
            System.out.println("部门经理批准了请假 " + days + " 天。");
        } else {
            if (nextHandler != null) {
                nextHandler.handleRequest(days);
            } else {
                System.out.println("没有合适的领导可以批准请假 " + days + " 天。");
            }
        }
    }
}

// 具体的处理者类,比如总经理,实现Handler接口
class GeneralManager implements Handler {
    private Handler nextHandler;

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

    @Override
    public void handleRequest(int days) {
        if (days <= 10) {
            System.out.println("总经理批准了请假 " + days + " 天。");
        } else {
            if (nextHandler != null) {
                nextHandler.handleRequest(days);
            } else {
                System.out.println("没有合适的领导可以批准请假 " + days + " 天。");
            }
        }
    }
}

// 具体的处理者类,比如董事长,实现Handler接口
class Chairman implements Handler {
    @Override
    public void setNextHandler(Handler nextHandler) {
        // 董事长作为最高级领导,不需要设置下一个处理者
        // 这里可以不做任何操作,或者抛出一个异常表示不应该调用此方法
        // 但为了符合接口定义,我们还是保留这个方法体为空
    }

    @Override
    public void handleRequest(int days) {
        if (days > 10) {
            System.out.println("董事长批准了请假 " + days + " 天。");
        } else {
            // 理论上董事长不会处理小于等于10天的请假,但这里为了完整性加上
            System.out.println("董事长不处理小于等于10天的请假请求。");
        }
        // 注意:董事长没有下一个处理者,所以不需要调用nextHandler.handleRequest(days);
    }
    
}

public class ChainOfResponsibilityDemo {
    public static void main(String[] args) {
        // 创建处理者对象-部门经理
        Handler departmentManager = new DepartmentManager();
        // 创建处理者对象-总经理
        Handler generalManager = new GeneralManager();
        // 创建处理者对象-董事长
        Handler chairman = new Chairman();

        //设置部门经理下一个处理者总经理
        departmentManager.setNextHandler(generalManager);
        //设置总经理下一个处理者董事长
        generalManager.setNextHandler(chairman);

        // 提交请假请求
        departmentManager.handleRequest(3);  // 该假条是部门经理进行批准的
        departmentManager.handleRequest(7);  // 该假条是总经理进行批准的
        departmentManager.handleRequest(11);  // 该假条是总经理进行批准的
    }
}

输出

部门经理批准了请假 3 天。
总经理批准了请假 7 天。
董事长批准了请假 11 天。
举报

相关推荐

0 条评论