设计模式-责任链模式

一、所涉及的类

一个抽象接口:里面定义一个 该接口的属性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方法交给下一个节点来处理

相关推荐
青石路3 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
像我这样帅的人丶你还6 小时前
Java 后端详解(五):Redis 缓存
java·后端·全栈
plainGeekDev8 小时前
GreenDAO → Room
android·java·kotlin
胡萝卜术13 小时前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
亦暖筑序13 小时前
Java 8老系统AI Workflow实战:把一次性AI对话升级成可恢复工作流
java·后端
敲代码的彭于晏14 小时前
Bean 生命周期完全图解:前端同学也能看懂的 Spring 核心机制
java·前端·后端
plainGeekDev15 小时前
ButterKnife → ViewBinding
android·java·kotlin
像我这样帅的人丶你还1 天前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩1 天前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
tntxia1 天前
Mybatis的日志输入
java