面试设计模式-责任链模式

这篇具有很好参考价值的文章主要介绍了面试设计模式-责任链模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 责任链模式

1.1 概述

在进行请假申请,财务报销申请,需要走部门领导审批,技术总监审批,大领导审批等判断环节。存在请求方和接收方耦合性太强,代码会比较臃肿,不利于扩展和维护。

1.2 责任链模式

针对上面,使用责任链模式,将请求方和接收方的业务进行解耦,客户端发送一个请求,由一个抽象的处理请求的类 Handler 来接受这个请求,而具体怎么处理请求,就由 Handler 的子类来完成处理请求方法的实现,每个子类满足条件则自己处理,不满足调用下一个处理子类进行处理,以此类推,形成一条处理的链条。

1.3 代码实现

1.采购请求类

package com.ljf.day0905;

/**
 * @ClassName: ClientRequest
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/05 21:55:41 
 * @Version: V1.0
 **/
public class ClientRequest {
        /* 请求类型 */
        private int type = 0;
        /* 请求金额 */
        private float price = 0.0f;
        /* 请求编号 */
        private int id = 0;
        /**
         * 全参构造
         *
         * @param type
         * @param price
         * @param id
         */
        public ClientRequest(int type, float price, int id) {
            this.type = type;
            this.price = price;
            this.id = id;
        }
        public int getType() {
            return type;
        }
        public float getPrice() {
            return price;
        }
        public int getId() {
            return id;
        }

}

2.审批抽象类

package com.ljf.day0905;

/**
 * @ClassName: Approver
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/05 21:56:49 
 * @Version: V1.0
 **/
public abstract class Approver {
        /* 审批人姓名 */
        protected String name;
        /* 下一个审批人 */
        protected Approver approver;
        /**
         * 创建审批人要指定姓名
         *
         * @param name
         */
        public Approver(String name) {
            this.name = name;
        }
        /**
         * 指定下一个审批人
         *
         * @param approver
         */
        public void setApprover(Approver approver) {
            this.approver = approver;
        }
        /**
         * 抽象的审批方法
         *
         * @param purchaseRequest
         */
        public abstract void approve(ClientRequest purchaseRequest);

}

3.子类来继承抽象审批类

3.1 DeaprtLeader

package com.ljf.day0905;

/**
 * @ClassName: DeaprtLeader
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/05 21:58:10 
 * @Version: V1.0
 **/
public class DeaprtLeader extends Approver {
        /**
         * 创建审批人要指定姓名
         *
         * @param name
         */
        public DeaprtLeader(String name) {
            super(name);
        }
        /**
         * 教学主任审批逻辑
         *
         * @param purchaseRequest
         */
        public void approve(ClientRequest purchaseRequest) {
            if (purchaseRequest.getPrice() <= 5000) {
                System.out.println("请求编号:" + purchaseRequest.getId() + "被" +
                        this.name + "处理");
            } else {
                approver.approve(purchaseRequest);
            }
        }

}

2.BossLeader

package com.ljf.day0905;

/**
 * @ClassName: BossLeader
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/05 21:59:23 
 * @Version: V1.0
 **/
public class BossLeader extends Approver{
        /**
         * 创建审批人要指定姓名
         *
         * @param name
         */
        public BossLeader(String name) {
            super(name);
        }
        /**
         * 院长审批逻辑
         *
         * @param purchaseRequest
         */
        public void approve(ClientRequest purchaseRequest) {
            if (purchaseRequest.getPrice() > 5000 && purchaseRequest.getPrice() <=
                    10000) {
                System.out.println("请求编号:" + purchaseRequest.getId() + "被" +
                        this.name + "处理");
            } else {
                approver.approve(purchaseRequest);
            }
        }

}

3.VicePrincipal

package com.ljf.day0905;

import com.sun.security.ntlm.Client;

/**
 * @ClassName: VicePrincipal
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/05 22:09:25 
 * @Version: V1.0
 **/

    public class VicePrincipal extends Approver {
        /**
         * 创建审批人要指定姓名
         *
         * @param name
         */
        public VicePrincipal(String name) {
            super(name);
        }
        /**
         * 副校长审批逻辑
         *
         * @param purchaseRequest
         */
        public void approve(ClientRequest purchaseRequest) {
            if (purchaseRequest.getPrice() > 10000 ) {
                System.out.println("请求编号:" + purchaseRequest.getId() + "被" +
                        this.name + "处理");
            } else {
                approver.approve(purchaseRequest);
            }
        }
    }

4.测试

package com.ljf.day0905;

/**
 * @ClassName: TestZe
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/05 22:00:19 
 * @Version: V1.0
 **/
public class TestZe {
    public static void main(String[] args) {

// 创建采购请求
        ClientRequest purchaseRequest = new ClientRequest(1, 33310000, 1);
// 创建审批人
        Approver departmentApprover = new DeaprtLeader("团主任");
        Approver dean = new BossLeader("方院长");
        Approver vicePrincipal = new VicePrincipal("磊副校长");

       // Approver principal = new Principal("喜校长");
// 设置下一个审批人
        departmentApprover.setApprover(dean);
// 这里要形成一个环链,避免如果 30000 金额以下的请求
// 直接交给校长处理,会出现空指针
// 当然,如果程序规定只能从主任开始处理
// 一层一层最后到校长处理,形成一个单链,这里就不用了设置了
       dean.setApprover(vicePrincipal);
        vicePrincipal.setApprover(departmentApprover);
       // principal.setApprover(departmentApprover);
// 测试:入口
        departmentApprover.approve(purchaseRequest);
    }
}

5.结果

面试设计模式-责任链模式,设计模式,面试,设计模式,责任链模式

责任链模式(Chain of Responsibility Pattern)_Myovlmx的博客-CSDN博客 文章来源地址https://www.toymoban.com/news/detail-703262.html

到了这里,关于面试设计模式-责任链模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【设计模式】责任链模式

    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处

    2024年02月12日
    浏览(30)
  • 设计模式:责任链模式

    责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象按照顺序处理请求,直到其中一个对象能够处理该请求为止。责任链模式将请求发送者和接收者解耦,使得多个对象都有机会处理请求,同时避免了请求发送者与接收者之间的直接耦合关系。 在

    2024年02月07日
    浏览(36)
  • 设计模式-责任链模式

    遇到一个面试的场景题目,让实现税率的计算 请使用Java语言实现如下税率计算: 1~5000 税率 0 5001~8000 3% 8001~17000 10% 17001~30000 20% 30001~40000 25% 40001~60000 30% 60001~85000 35% 85001~ 45% 要求 ⅰ. 逻辑正确,代码优雅 ⅱ. 可扩展性,考虑区间的变化,比如说起征点从5000变成10000等等,或者

    2024年02月11日
    浏览(24)
  • 设计模式——22. 责任链模式

    责任链模式是一种行为设计模式,它允许你创建一个对象链,每个对象都包含了请求的一部分处理逻辑,并且请求按照链的顺序依次传递,直到有一个对象处理它为止。责任链模式通常用于将一个请求从发送者传递给多个接收者,直到有一个接收者处理请求为止。 责任链模式

    2024年02月07日
    浏览(27)
  • 设计模式详解-责任链模式

    类型:行为型模式 实现原理:为请求创建了一个接收者对象的链。对请求的发送者和接收者进行解耦,每个接收者都包含对另一个接收者的引用,如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 作用:避免请求发送者与接收者耦合在一

    2024年02月12日
    浏览(29)
  • 重温设计模式 --- 责任链模式

    责任链模式 是一种行为型设计模式,它通过一条由多个处理器组成的链来处理请求,每个处理器都有机会处理请求,如果一个处理器不能处理该请求,它会将请求传递给下一个处理器,直到请求被处理为止。 在实际应用中,责任链模式常用于处理请求的分发、事件处理等场

    2024年02月13日
    浏览(30)
  • 说说设计模式~责任链模式

    回到目录 它是一种设计模块,主要将操作流程与具体操作解耦,让每个操作都可以设置自己的操作流程,这对于工作流应用是一个不错的选择! 下面是官方标准的定义:责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一

    2024年02月11日
    浏览(29)
  • 设计模式之责任链模式

    责任链设计模式是一种行为设计模式,它允许你创建一个对象链。请求从链的一端进入,并沿着链的路径依次经过各个对象,直至找到合适的处理者。每个对象都决定是否要处理该请求或将其传递给链中的下一个对象。 1.1 核心概念 Handler(处理者):每个处理者对象包含了处

    2024年02月05日
    浏览(35)
  • 设计模式07-责任链模式

    责任链模式属于行为设计模式,常见的过滤器链就是使用责任链模式设计的。 Q:假设有一个闯关游戏,共三关,每一关达到通过条件后才能进入下一关,使用java实现。 A:针对这个问题,按照朴素的想法,我们可以定义三个类,分别是第一关、第二关、第三关,客户端启动

    2024年02月16日
    浏览(27)
  • Java设计模式——责任链模式

    当一个请求需要在多个对象之间传递,每个对象都可能处理该请求或将其传递给下一个对象。在这种情况下,需要避免将发送者与接收者之间的耦合,以及确定请求的处理方式。此时可使用责任链模式,它的优点有降低耦合度(无需关心哪个对象会处理请求),灵活性(可以

    2024年02月21日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包