JAVA23种设计模式之责任链模式

java23种设计模式-责任链模式 责任链模式是一种行为型设计模式,允许将请求沿着处理链传递,直到有一个处理者处理它。每个处理者决定自己处理请求或传递给下一个处理者,实现请求发送者与接收者的解耦。 阅读详情
  1. 责任链模式
    是一种对象的行为模式,在责任链模式中,很多对象由每一个对象对其下家的引用而连接起来形成一条链,请求在这个链上传递,直到链上的某一个对象决定处理该请求为止。换句话说,就是一个请求发送过来,先有A进行判断自己能否处理,如果能够处理就直接处理掉,不能的话就传递给到B,B也做和A同样的操作,直到有一个将这个请求处理掉为止。
  2. 责任链模式示意图
    责任链模式
  3. 责任链模式中的角色
  • 抽象处理者角色: 处理请求的接口,通常是一个JAVA抽象类或者是接口,一般会包含一个handleRequest()的抽象方法。
  • 具体处理角色: 实现或者继承抽象处理角色。并且重新handleRequest()方法,来判断是直接处理掉请求还是发送给到一下个具体处理角色。
  1. 示例代码:
    场景:某公司对于订单按照金额大小可以申请不同的折扣,但是不同金额所需要折扣的审批级别不同,分别为直接上级、经理、副总监、总监审批,具体金额见代码。
  • 抽象处理者角色:
public abstract class AbsHandle {
     String leader;
    AbsHandle nextHandler;
    public AbsHandle(String leader) {
        this.leader = leader;
    }
    abstract void handleRequest(Request request);
    public AbsHandle getNextHandler() {
        return nextHandler;
    }
    public void setNextHandler(AbsHandle nextHandler) {
        this.nextHandler = nextHandler;
    }
}
  • 具体处理角色:
    直接上级角色:
public class SuperiorHandle extends AbsHandle {
    public SuperiorHandle(String leader) {
        super(leader +" ----superior");
    }
    @Override
    void handleRequest(Request request) {
        float price = request.getOrderPrice();
        if (price <= 10000){
            System.out.println("金额10000以内,由直接上级审批!直接上级为:"+this.leader);
        }else{
            getNextHandler().handleRequest(request);
        }
    }
}

经理审批角色:

public class ManagerHandle  extends AbsHandle{
    public ManagerHandle(String leader) {
        super(leader + "Manager");
    }
    @Override
    void handleRequest(Request request) {
        float price = request.getOrderPrice();
        if (price > 10000  && price<=50000){
            System.out.println("金额10000以上50000以内,由经理审批!经理为:"+this.leader);
        }else{
            getNextHandler().handleRequest(request);
        }
    }
}

副总监审批角色:

public class DeputyDirectorHandle extends AbsHandle {
    public DeputyDirectorHandle(String leader) {
        super(leader+"-----DeputyDirector");
    }
    @Override
    void handleRequest(Request request) {
        float price = request.getOrderPrice();
        if (price > 50000  && price<=100000){
            System.out.println("金额50000以上100000以内,由副总监审批!副总监为:"+this.leader);
        }else{
            getNextHandler().handleRequest(request);
        }
    }
}

总监审批角色:

public class DirectorHandle extends AbsHandle {
    public DirectorHandle(String leader) {
        super(leader+"----------------Director");
    }
    @Override
    void handleRequest(Request request) {
        float price = request.getOrderPrice();
        if (price > 100000  ){
            System.out.println("金额100000以上,由总监审批!总监为:"+this.leader);
        }else{
            getNextHandler().handleRequest(request);
        }
    }
}

具体请求:

public class Request {
    private String customer;
    private float orderPrice;
    public Request(String customer, float orderPrice) {
        this.customer = customer;
        this.orderPrice = orderPrice;
    }
    public String getCustomer() {
        return customer;
    }
    public void setCustomer(String customer) {
        this.customer = customer;
    }
    public float getOrderPrice() {
        return orderPrice;
    }
    public void setOrderPrice(float orderPrice) {
        this.orderPrice = orderPrice;
    }
}

测试主函数:

public class Main {
    public static void main(String[] args) {
        Request request = new Request("中国联通",5000);
        Request request1 = new Request("中国移动",50000);
        Request request2 = new Request("sap",80000);
        Request request3 = new Request("weaver",150000);
        AbsHandle superiorHandle = new SuperiorHandle("Tom");
        AbsHandle managerHandle = new ManagerHandle("Jack");
        AbsHandle deputyDirectorHandle = new DeputyDirectorHandle("Mike");
        AbsHandle directorHandle = new DirectorHandle("Tony");
        //关联层级,形成链
        superiorHandle.setNextHandler(managerHandle);
        managerHandle.setNextHandler(deputyDirectorHandle);
        deputyDirectorHandle.setNextHandler(directorHandle);
        superiorHandle.handleRequest(request3);
        superiorHandle.handleRequest(request2);
        managerHandle.handleRequest(request1);
        superiorHandle.handleRequest(request);
    }
}
  1. 责任链模式的优缺点
    优点:
    降低了耦合度,将请求者和发送者解耦合;简化具体的责任对象,各个对象只需要处理自身需要处理的内容,不需要考虑其他部分;责任对象便于扩展和删除。
    缺点:
    很多情况下责任链模式会占用一定的内存;无法保证请求一定被执行。这种模式下,排查错误比较麻烦,可能需要对每个对象进行排查。
Java中的23个设计模式 【行为型模式】 中的 【责任链模式】 阅读详情

相关推荐

GD32F407工程模板搭建全记录:从零整理固件库、创建文件夹到编译通过

本文详细记录了GD32F407工程模板的搭建过程,从固件库整理、目录规划到Keil环境配置,帮助开发者快速搭建可维护的嵌入式工程结构。重点介绍了开发环境搭建、工程目录设计、Keil配置及常见编译问题解决方案,适合嵌入式开发者参考。

weixin_29164497的博客 118

设计模式之责任链模式

1.什么是责任链模式 责任链模式就是将接受者对象连城一条链,并在该链上传递请求知道有一个接受者对象处理它。 通过让更多对象有机会处理请求,避免了请求发送者和接受者之间的耦合。 责任链模式中,作为请求接受者的多个对象通过对其后继的引用而连接起来的形成的一条链。 请求这这条链上传递,直到链上的某个接受者处理了这个请求,每个接受者都可以选择自行处理请求或是向 后继传递请求。 2.责任链模

flying_fish_wj的博客 354

手把手教你用手机号注册的Apple ID成功登录Developer账户(避坑指南)

本文详细解析了使用手机号注册的Apple ID登录开发者账户时常见的'不符合使用条件'报错问题,并提供了从添加可验证邮箱到设置主账号的四步解决方案。特别针对Apple Developer账户的验证机制,帮助开发者避免因邮箱缺失导致的登录失败,提升账户激活成功率。

z5a6b的博客 1220

java设计模式---责任链模式详解

深入理解责任链模式

zhenghuishengq的博客 2万+

HALCON基于描述符的模板匹配(未标定)

HALCON基于不标定描述符的模板匹配

king_linj的博客 890

eDP/DP接口简介

目前,在视频传输协议以及接口领域,外部接口主要是DP与HDMI两分天下,当然之前出现过很多接口-VGA, DVI等等,最新平台基本以这两个为主;笔记本内部接口就基本上使用eDP((Embedded Display Port))作为标准接口来驱动液晶屏了。那么问题来了,eDP和DP,是完全兼容的么?eDP,DP,HDMI,这三种接口的显示器,可以插在同一个接口上使用么?这篇文章,就会从硬件和一部分协议的角度分析一下这三大协议。

weixin_50518899的博客 2万+

23种设计模式之职责链模式(Chain of Responsibility Pattern)

本篇文章将23种设计模式中的访问者模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 1万+

用AT7456E给监控摄像头加OSD?5步搞定时间水印和Logo叠加

本文详细解析了如何使用AT7456E视频字符叠加芯片为监控系统添加专业级OSD功能,涵盖硬件设计、字符库编程和系统集成等关键步骤。通过5步操作实现时间水印和Logo叠加,提升监控系统的可用性和专业性,特别适合安防和工业视觉应用。

sea99的博客 1012

Java设计模式之责任链模式:从入门到架构级实践

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,允许将请求沿着处理链传递,直到某个处理对象能够处理它。这种模式通过解耦请求的发送者和接收者,提供动态扩展处理逻辑的能力。责任链模式广泛应用于日志处理、权限校验、过滤器链(如Servlet Filter)、工作流审批等场景。多级审批流程:如请假、报销审批。可插拔处理逻辑:如HTTP请求处理管道。横切关注点分离:如日志、安全、事务管理。

java2cy 1156

Jetson Orin边缘语音AI实战:用Riva ASR/TTS + Llama 2打造离线智能语音助手

本文详细介绍了如何利用NVIDIA Jetson Orin的边缘计算能力,结合Riva ASR/TTS语音引擎和Llama 2大语言模型,构建完全离线的智能语音助手。通过硬件优化、量化部署和性能调优,实现在网络不稳定环境下的高效语音交互,适用于智能家居、车载系统等场景。

weixin_29053383的博客 242

闲鱼爬虫实战:模拟手机端破解反爬策略,爬取指定商品搜索数据,爬取闲鱼搜索指定商品(需手机端模拟)o 技术点:抓包分析、cookie与token

技术点作用抓取手机 App 请求,分析 API 结构、Header、参数加密情况requestsPython 中最常用的 HTTP 库,用于发送模拟请求Session 对象自动管理 Cookie,保持会话User-Agent & 设备特征模拟手机型号、系统版本,绕过服务端检测闲鱼部分接口存在签名,需要逆向或复用有效 Token多线程/异步提高爬取效率(需节制,避免封 IP)解析 HTML 或 JSON 数据注意:闲鱼的接口加密程度中等偏上,部分接口存在动态签名(如x-signx-mini-wua。

2201_76125261的博客 712

23种设计模式——责任链模式

本文将结合个性化推荐系统中的广告推荐流程来讲解责任链模式,广告位经过定义的责任链 预处理—>召回模块—>粗排序模块—>精排序模块—>规则模块—> 资讯模块—>后处理:上报信息 得到个性化的推荐广告位,来讲解责任链模式在实际生产中的使用方式。 一、配置信息 jdk 版本:jdk8 框架:springboot 二、maven配置 <dependenc...

两只橙的博客 2803

C#从入门到精通(35)—如何防止winform程序因为误操作被关闭

我们在开发的上位机软件运行起来以后,一般在右上角都有一个关闭按钮,正常情况下点击关闭按钮就能关闭软件,但是不排除我们不想关闭软件,但是因为不小心把鼠标点到了关闭按钮,如果这是一个正在生产的机器,突然关闭软件可能会导致产品损坏,那么我们如何去解决这个误操作的问题呢,本文就来讲解解决方案!

qq_34059233的博客 678

java 23 种设计模式-14-java 责任链模式(Chain of Responsibility Pattern)

目录 目录 责任链模式 实际案例 定义 测试 实现方式 UML &amp; Code UML Code 系列导航 责任链模式 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接...

3万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JAVA的23种设计模式之责任链模式

责任链模式: 将能够处理同一请求的对象连接成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求。如果能则处理,如果不能则传递给链上的下一个对象。 场景: 打牌时候,轮流出牌。 接力赛跑 大学中,奖学金审批 公司中,公文审批 公司里面,请假条的审批过程: 如果请假天数小于3天,主任审批 如果请假天...

qq_40990836的博客 323

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【十一】Java设计模式GOF23之责任链模式

简介 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 javax.servlet.Filter就是用的责任链...

Sid小杰的博客 366

java23中设计模式之责任链模式

上一节说到策略模式:https://blog.youkuaiyun.com/zhanglei082319/article/details/88980673 所谓的策略模式:就是将一些不定的业务需求抽象出来,作为一种特定的策略方式分开实现,当需要使用哪种策略时,就调用该策略的具体实现。 今天说一种新的设计模式:责任链模式 责任链模式在实际开发中应用非常广泛,绝大部分的框架源码,一般企...

码眼的博客 485

[java] 23种设计模式之责任链模式

公司请假系统,业务逻辑如下:不超过3天的,组长审批超过3天且小于7天的,总监审批超过7天且小于15天的,部长审批超过15天,前端直接拒绝,不会进入审批流程(违反了公司的请假规定)底层小职员请假,直接去OA系统填写请假申请,生成请假工单系统会根据请假天数,将请假工单派发给对应的审批人以请假审批系统为例,组长 → \rightarrow→ 总监 → \rightarrow→ 部长形成了一条链职员提交请假申请后,请求会沿着这条链传递,直到有对象可以处理它。

weixin_60748184的博客 665

JAVA23种设计模式——责任链模式

实际上,责任链模式是 一个请求(不管是用户的请求,系统的请求还是哪里来的请求),可以有很多个接收者,这些接受者自身每个都有适合处理这个请求的场景,如果满足自身的场景自己就会处理,如果不满足自己的使用场景就会调用下一个接收者的引用,并把请求传递给下一个接收者来处理,下一个接受者以此类推,所以责任链上的每一环都有对下一环的引用。 比如Struts2的拦截器,一个Action过来,第一道接收者是处理字...

free_journey的博客 255

java23种设计模式之责任链模式

职责链模式 又称责任链模式(Chain of Responsibility),是指为了避免请求的发送者和接收者之间的耦合关系,使多个接收对象都有机会处理请求。将这些对象形成一条链,沿着这条链传递请求,直到有一个对象处理为止。 通俗一点说:当客户提交一个请求时,从第一个对象开始,链中收到请求的对象要么亲自处理它,要么传递给下一个对象,提交请求的对象并不知道谁会处理它。职责链中也可能没有一个对象处

始终未曾游过那片海,不知那边是否有我想要的生活呢 709

java实现23种设计模式之责任链模式

顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 package com.ceshi16; ...

weixin_30768175的博客 94

JAVA的23种设计模式---责任链模式

概要:该文章参考了《设计模式之禅》一书及一些前辈的博客文章 1.该文章阐述了责任链模式的基础原理及示例代码; 2.该文章适合初学设计模式的技术人员研习; 3.该文章有许多不足之处,请各位大咖指正,喷子绕道;

Ingram的博客 549

java中23种设计模式--责任链模式

兄弟们,老铁们.又到了学习锻炼我们可爱小小大脑的时候了~~~~~ 喝了这碗鸡血,学就完了~~~ 青年同志们必须记住,想要连跑带跳地把过去的一切文化遗产得着,那是办不到的。这需要有坚定的顽强性和艰苦的劳动。要知道,在这条路上克服困难,这件事本身就是非常好的兴奋剂。 1.责任链模式定义 使多个对象都有机会处理请求,从而避免请求的发送 者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 责任链模式的提出是为了“解耦”,以应变系统需求的变更和不明确性。 2.责任链.

weixin_37967166的博客 179

java23种设计模式(十三) -- 责任链模式(行为设计模式)

责任链模式 简介 责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。 举例 击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正。开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒。 比如

JavaTeachers的博客 219

Java二十三种设计模式-责任链模式(17/23)

责任链模式是一种行为型设计模式,它通过将请求的发送者和接收者解耦,将这些请求沿着一条链传递,直到链上的某个节点能够处理该请求。这种模式允许系统在运行时动态地添加或修改处理请求的方式,而无需修改已有的代码。责任链模式提供了一种强大的方法来处理请求,允许请求沿着处理者链进行传递,直到被适当处理。通过本文的深入分析,希望读者能够对责任链模式有更全面的理解,并在实际开发中做出合理的设计选择。Java二十三种设计模式-单例模式(1/23)Java二十三种设计模式-工厂方法模式(2/23)

小相探索IT世界 1934

23种设计模式之【责任链模式】-核心原理与 Java 实践

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它通过构建一个处理者对象链,使请求能够在链中传递,直到有一个处理者能够处理该请求为止。:实现处理请求的方法,判断能否处理当前请求,如果可以则处理,否则将请求传递给下一个处理者。:定义处理请求的接口,包含一个指向下一个处理者的引用。符合开闭原则,新增处理者无需修改原有代码。部门经理可审批 ≤5000 元的报销。总经理可审批 ≤10000 元的报销。组长可审批 ≤1000 元的报销。:包含需要处理的信息。

学习 记录 总结 分享 527
上一篇: JAVA23种设计模式之生成器模式
下一篇: JAVA23种设计模式之享元模式(蝇量模式)
CoderJu
博客等级 码龄11年 11粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值