设计模式-责任链模式

一、所涉及的类

一个抽象接口:里面定义一个 该接口的属性next节点,外加set get 方法,以及请求处理方法

N个抽象接口实现类:实现请求处理方法,如果自己能处理则处理,如果处理不了则调用getnext方法调用返回值的请求处理方法

注意:在调用类中创建各个节点,并通过setNext的方式来定义各个节点的顺序,类似于审批流

二、实现代码

抽象接口

java 复制代码
public abstract class Approval {
    private Approval next;
    public void setNext(Approval next)
    {
        this.next = next;
    }
    public Approval getNext()
    {
        return next;
    }
    protected abstract void handle(String request);
}

抽象接口实现类1

java 复制代码
public class AskApprovalFromBoss extends Approval{
    @Override
    protected void handle(String request) {
        if (request.equals("Ask")){
            System.out.println("请假老板审批通过");
            if (getNext() != null ){
                getNext().handle(request);
            }else{
                System.out.println("审批结束");
            }
        }else{
            getNext().handle(request);
        }
    }
}

抽象接口实现类2

java 复制代码
public class AskApprovalFromLeader extends Approval{
    @Override
    protected void handle(String request) {
        if (request.equals("Ask")){
            System.out.println("请假组长审批通过");
            if (getNext() != null ){
                getNext().handle(request);
            }else{
                System.out.println("审批结束");
            }
        }else{
            getNext().handle(request);
        }
    }
}

抽象接口实现类3

java 复制代码
public class ResignApprovalFromBoss extends Approval{
    @Override
    protected void handle(String request) {
        if (request.equals("Resign")){
            System.out.println("离职老板审批通过");
            if (getNext() != null ){
                getNext().handle(request);
            }else{
                System.out.println("审批结束");
            }
        }else{
            getNext().handle(request);
        }
    }
}

调用类

java 复制代码
public class ChainApplication {
    public static void main(String[] args) {
        /**
         * 改实现是设置了三个审批节点,发起请假的流程,只有 Leader和Boss可以审批,boss的离职审批节点不做处理
         */
        Approval askApprovalFromLeader = new AskApprovalFromLeader();
        Approval askApprovalFromBoss = new AskApprovalFromBoss();
        Approval resignApprovalFromBoss = new ResignApprovalFromBoss();
        askApprovalFromLeader.setNext(resignApprovalFromBoss);
        resignApprovalFromBoss.setNext(askApprovalFromBoss);
        askApprovalFromLeader.handle("Ask");
    }
}

三、总结

责任链模式是在调用类中指定链式关系,并在处理方法中判断是不是自己处理,如果不是则调用getNext方法交给下一个节点来处理

相关推荐
马士兵教育1 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
snow@li2 小时前
Java:理解 Gradle / 后端项目的管家 / 打包SpringBoot 应用 / 完成编译、下载依赖、运行测试、打包 JAR/WAR / 速查表
java
云烟成雨TD2 小时前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
zfoo-framework2 小时前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java
逍遥德2 小时前
MQTT教程详解-05.SpringBoot集成mqtt client 性能分析
java·spring boot·spring·mt
云烟成雨TD3 小时前
Spring AI 1.x 系列【54】Retry 机制分析
java·人工智能·spring
weixin_523185323 小时前
Collections.unmodifiableMap详解:真的不可修改吗?
java·linux·前端
点燃大海3 小时前
SpringAI构建智能体
java·spring boot·spring·springai智能体
xier_ran3 小时前
【infra之路】02_RadixAttention与KV_Cache管理
java·spring boot·spring
黑马师兄3 小时前
RAG混合检索深度解析:让AI真正找到你要的内容
java·人工智能·ai·agent·rag·ai-native