设计模式之责任链模式

文章目录

定义

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你将请求沿着处理者链进行发送。收到请求后,每个处理者都可以处理请求或将其传递给链中的下一个处理者。这一模式简化了对象之间的相互连接,使得多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合。

责任链模式的关键要素:

  1. 处理请求的接口:定义处理请求的接口或抽象类。
  2. 具体处理者:实现上述接口的具体类,可以处理请求,也可以选择将请求传递给链中的下一个处理者。
  3. 责任链:管理处理者的链结构,可以决定请求的传递路径。

示例代码

java 复制代码
public interface Handler {
    /**
     * 设置下个处理器
     * 
     * @param nextHandler 下个处理器
     */
    void setNextHandler(Handler nextHandler);

    /**
     * 处理
     * 
     * @param days 天数
     * @return 成功还是失败
     */
    boolean handler(int days);
}
java 复制代码
public class FirstHandler implements Handler {
    private static final int ALLOW_MAX_DAYS = 3;
    private Handler next;

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

    @Override
    public boolean handler(int days) {
        if (days <= ALLOW_MAX_DAYS) {
            System.out.println("组长审批");
            return true;
        }
        System.out.println("审核天数大于3天,组长无权限审核");
        System.out.println("转下一个人审核");
        return next.handler(days);
    }
}
java 复制代码
public class SecondHandler implements Handler {
    private static final int ALLOW_MAX_DAYS = 7;
    private Handler next;

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

    @Override
    public boolean handler(int days) {
        if (days <= ALLOW_MAX_DAYS) {
            System.out.println("部门经理审批");
            return true;
        }
        System.out.println("审核天数大于7天,部门经理无权限审核");
        System.out.println("转下一个人审核");
        return this.next.handler(days);
    }
}
java 复制代码
public class ThirdHandler implements Handler {
    private static final int ALLOW_MAX_DAYS = 15;
    private Handler next;

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

    @Override
    public boolean handler(int days) {
        if (days <= ALLOW_MAX_DAYS) {
            System.out.println("总经理审核");
            return true;
        }
        System.out.println("审核天数大于15天,总经理无权限审核");
        System.out.println("转下一个人审核");
        return this.next.handler(days);
    }
}
java 复制代码
public class ChainTest {
    @Test
    public void test() {
        FirstHandler firstHandler = new FirstHandler();
        SecondHandler secondHandler = new SecondHandler();
        ThirdHandler thirdHandler = new ThirdHandler();
        firstHandler.setNextHandler(secondHandler);
        secondHandler.setNextHandler(thirdHandler);
        firstHandler.handler(15);
    }
}

运行结果

复制代码
审核天数大于3天,组长无权限审核
转下一个人审核
审核天数大于7天,部门经理无权限审核
转下一个人审核
总经理审核

示例源码地址

https://gitee.com/youxiaxiaomage/java-practices/tree/master/yxxmg-gof-sample/src/main/java/com/yxxmg/gof/behavior/chain

相关推荐
码匠许师傅15 小时前
【设计模式精讲】15.享元模式(Flyweight)
c++·设计模式·享元模式·uml
事圆则缓15 小时前
Android 常用设计模式速查
android·设计模式
码匠许师傅1 天前
【设计模式精讲】14.外观模式(Facade)
c++·设计模式·uml·外观模式
evans在进步1 天前
Java 常用设计模式(二):装饰器、适配器、责任链、模板方法、策略与观察者
java·开发语言·设计模式
码匠许师傅1 天前
【设计模式精讲】13.装饰器模式(Decorator)
c++·设计模式·uml·装饰器模式
evans在进步2 天前
Java 常用设计模式入门:建造者、工厂、单例、外观与代理
java·python·设计模式
字节跳动开源3 天前
VisActor全新图可视化开源项目:VGraph
前端·设计模式·开源
码匠许师傅3 天前
【设计模式精讲】11.桥接模式(Bridge)
c++·设计模式·桥接模式·uml
学习星球3 天前
AI Agent 成本工程实战:从 OpenAI Codex 的 8 个“烧 Token“Bug 学起
人工智能·设计模式·微信小程序
AI人工智能+电脑小能手4 天前
大白话说Java设计模式-46-责任链模式(业务实战篇)
java·设计模式·责任链模式·风控校验·servlet filter·spring interceptor·链式处理