设计模式-责任链模式

一、所涉及的类

一个抽象接口:里面定义一个 该接口的属性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 小时前
Java处理大型 Excel 文件(超过 100 万行)难题
java
老K的Java兵器库3 小时前
Collections 工具类 15 个常用方法源码:sort、binarySearch、reverse、shuffle、unmodifiableXxx
java·开发语言·哈希算法
武子康3 小时前
Java-153 深入浅出 MongoDB 全面的适用场景分析与选型指南 场景应用指南
java·开发语言·数据库·mongodb·性能优化·系统架构·nosql
救救孩子把4 小时前
从 JDK 8 到 JDK 23:HotSpot 垃圾回收器全景演进与深度剖析
java·开发语言·jvm·jdk
恋红尘4 小时前
设计模式详解
设计模式
ha20428941944 小时前
Linux操作系统学习之---线程控制
java·linux·学习
Knight_AL4 小时前
Spring AOP 中@annotation的两种写法详解
java·spring
某空m5 小时前
【Android】BottomNavigationView实现底部导航栏
android·java
顾漂亮5 小时前
Spring AOP 实战案例+避坑指南
java·后端·spring
SimonKing5 小时前
Mybatis-Plus的竞争对手来了,试试 MyBatis-Flex
java·后端·程序员