设计模式-责任链模式

一、所涉及的类

一个抽象接口:里面定义一个 该接口的属性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 分钟前
Kafka消息积压的多维度解决方案:超越简单扩容的完整策略
java·分布式·中间件·kafka
wfsm6 分钟前
spring事件使用
java·后端·spring
微风粼粼24 分钟前
程序员在线接单
java·jvm·后端·python·eclipse·tomcat·dubbo
缘来是庄28 分钟前
设计模式之中介者模式
java·设计模式·中介者模式
rebel1 小时前
若依框架整合 CXF 实现 WebService 改造流程(后端)
java·后端
代码的余温2 小时前
5种高效解决Maven依赖冲突的方法
java·maven
慕y2742 小时前
Java学习第十六部分——JUnit框架
java·开发语言·学习
paishishaba2 小时前
Maven
java·maven
张人玉3 小时前
C# 常量与变量
java·算法·c#
Java技术小馆3 小时前
GitDiagram如何让你的GitHub项目可视化
java·后端·面试