设计模式-责任链模式

一、所涉及的类

一个抽象接口:里面定义一个 该接口的属性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 小时前
GPT-6 与 Intelligent UI:从回答到可审计操作的产品迁移
java·人工智能·后端
SL_staff2 小时前
运维救火实录:钉钉考勤API变更引发工资计算异常,我们用JVS-Logic可视化逻辑引擎实现分钟级热修复
java·mysql·全栈
SunnyDays10112 小时前
Java 查找并高亮 Word 文字:精确查找及正则表达式模糊查找
java·查找文字·word 文档·高亮文字·正则匹配查找·模糊查找
geats人山人海2 小时前
java 4继承
java·开发语言
众链网络3 小时前
Agent 的成本大头不在“写“,在“判断“:拆解专用决策模型的三层架构
java·开发语言·人工智能·微服务
周小董3 小时前
[1371]jdk管理工具
java·开发语言
青春逝如流水3 小时前
Java 中线程的创建方式:从基础到现代
java·开发语言·多线程·ai文章
Peregrine94 小时前
C++ - > 类和对象
java·c++·算法
2501_933923254 小时前
SpringCloud组件:Eureka服务注册与发现
java·开发语言·后端·spring cloud·eureka
Wang's Blog4 小时前
Java 中间件之 RabbitMQ 快速入门: SpringAMQP 消息转换器
java·中间件·java-rabbitmq