设计模式之责任链模式

【Java设计模式】Java设计模式之(五)责任链模式(Chain of Responsibility Pattern) 本文目录 一、责任链模式介绍 二、代码实现 2.1 业务逻辑 2.2 代码实现 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 一、责任链模式介绍 意图:避免请求发送者与接收者耦合在一起,让多个对象都 阅读详情

 

责任链模式数据23种设计模式中的行为型模式,他是使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

场景:一个员工报销,需要层层审批,初级领导只能报销500元以内的,中级领导能报销2000以内的,大领导能报销5000以内的,再大的需要找大boss进行报销了,这种情况就可以使用责任链模式进行设计。

一、抽象处理者

    abstract class Leader {
        protected Leader nextHandler;

        public final void handleRequest(int money) {
            if (money < limitMoney()) {
                doHandler();
            } else {
                nextHandler.handleRequest(money);
            }
        }

        protected abstract int limitMoney();

        protected abstract void doHandler();
    }

二、具体的处理者

 1、初级领导

     class LowLeader extends Leader {

         @Override
         protected int limitMoney() {
             return 500;
         }

         @Override
         protected void doHandler() {
             System.out.println("LowLeader能处理500元以内的");
         }
     }

2、中级领导

    class MiddleLeader extends Leader{
        @Override
        protected int limitMoney() {
            return 2000;
        }

        @Override
        protected void doHandler() {
            System.out.println("ModdleLeader能处理2000元以内的");
        }
    }

3、高级领导

    class HeightLeader extends Leader {
        @Override
        protected int limitMoney() {
            return 5000;
        }

        @Override
        protected void doHandler() {
            System.out.println("HeightLeader能处理5000元以内的");
        }
    }

4、大领导

    class Boss extends Leader {
        @Override
        protected int limitMoney() {
            return Integer.MAX_VALUE;
        }

        @Override
        protected void doHandler() {
            System.out.println("Boss能处理所有的");
        }
    }

三、客户端发起请求

    class Test {
        public static void main(String[] args) {
            //创建各个领导
            Leader lowLeader = new LowLeader();
            Leader moddleLeader = new MiddleLeader();
            Leader heightLeader = new HeightLeader();
            Leader boss = new Boss();
            //组织各个领导的顺序关系
            lowLeader.nextHandler = moddleLeader;
            moddleLeader.nextHandler = heightLeader;
            heightLeader.nextHandler = boss;
            //发起报销请求
            lowLeader.handleRequest(999);
        }
    }

责任链模式除了能够设定好的顺序进行请求之外,还能够进行越级请求,这种请求成为不纯的责任链,在实际应用中遇见的绝大多数数据不纯的责任链模式。

四、责任链模式优缺点

优点:分离职责,动态组合。每个请求者只负责自己的部分,实现了请求者与处理者代码分离,可以对请求者和处理者进行解耦,提高代码灵活性。

缺点:会产生大量的细粒度职责对象。其次责任链太长或者每条链判断处理的时间太长会影响性能,特别是递归循环的时候。

 

 

 

ymPrompt的doHandler方法来实现获取子窗口返回值的方法 郁闷的很,心里仍不死心,有重头到尾的那介绍的方法看了一遍,看到doHandler时有两个参数sign和autoClose,看了方法介绍后,觉得这个方法可行(以前一直都是用ymPrompt.close方法来直接关闭子窗口 ),就写了一段脚本测试下,可以实现我想要的 ,现将代码贴出如下: 父窗口代码: 代码如下: function viewSubFeeDetail(feeId) { ymPrompt.win({message:’viewSubFeeDetail.action?feeId=’+feeId,handler:callBack,width:800,height:400,title:’资费 立即下载

相关推荐

从零开始搭建一个高性能电流镜:手把手教你设计Wide-Swing Cascode结构

本文详细解析了Wide-Swing Cascode电流镜的设计原理与实战流程。针对低压高性能模拟电路设计的核心挑战,文章手把手指导如何从理论分析、参数计算到仿真验证,搭建一个兼具高输出阻抗和低输出电压裕度的电流镜结构,并深入探讨了偏置电路生成、性能优化及版图匹配等关键要点。

weixin_29294975的博客 621

一文搞懂责任链模式

原理 将多个处理器连成一个链条,处理器A处理请求成功后,将请求交给处理器B,处理器B处理成功后再交给处理器C,以此类推,链条上每个处理器各自承担自己的职责。如果处理器处理失败,那么不再继续往后传递处理。 实现方式 方式1 定义IDoHandler接口,业务处理类直接实现该接口实现业务方法,定义一个Handler类,该类持有IDoHandler、Successor,IDoHandler代表具体业务实现,Successor代表下一个Handler;HandlerChain用来表示处理器链条,从数据结构上来说是一

qq_36059306的博客 200

MATLAB离线附加功能包下载与安装教程

本文介绍如何下载与安装MATLAB离线附加功能包,便于大家更加高效的使用MATLAB。

加斯顿工程师的博客 1万+

ymPrompt 自定义关闭弹出的子窗口

核心代码: parent.ymPrompt.doHandler('close'); 代码示例: 父页面代码:   function SelectNode() {                         ymPrompt.win({ message: '../BCSelect/SelectNodes.aspx', handler: callBack, width: 850, he

dmz1981的专栏 6532

FastAPI 极简教程(偏实战,一篇搞定)

本文是一篇FastAPI实战教程,通过最少的概念讲解快速掌握FastAPI的核心功能。文章首先介绍FastAPI是基于Starlette和Pydantic的高性能Python API框架,具有自动生成文档、类型驱动校验、异步支持和依赖注入等优势。教程从安装环境开始,演示了如何创建最小项目并编写第一个"Hello World"接口。接着详细讲解了路由参数处理(Path/Query/Body)、Pydantic数据模型校验、响应模型控制、状态码设置等核心功能。在高级功能方面,重点介绍了错误处

AI天才研究院 809

CMake入门教程【基础篇】CMake+Visual Studio2022构建C++项目

CMake+Visual Studio2022搭建C++环境

小鱼酱的博客 4969

设计模式:责任链模式(Chain of Responsibility)

 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。 责任链模式的角色: 1. 抽象处理者角色(Handler):定义出一个处理请求的接口。如果需要,接口可以定义出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Ja...

weixin_34153893的博客 119

ROS2入门到精通—— 2-9 ROS2实战:Nav2常见的工程问题(参考3D视觉工坊)

本文介绍了Nav2常见的工程问题,还有调试DWB的一些经验,以及DWB的一些缺点

BigDavid123的博客 1066

利用ymPrompt的doHandler方法来实现获取子窗口返回值

今天在写页面时用到了ymPrompt的win方法来弹出一个窗口。由于要用到获取子窗口返回来的值判断是否刷新父窗口,在ymPrompt的组件Demo中一直没有找到合适的方法实现,郁闷的很,心里仍不死心,有重头到尾的那介绍的方法看了一遍,看到doHandler时有两个参数sign和autoClose,看了方法介绍后,觉得这个方法可行(以前一直都是用ymPrompt.close方法来直接关闭子窗口),...

weixin_30709635的博客 154

SAR成像专栏目录

为方便大家阅读,我做了一个专栏目录,蓝色字有超链接,可以直接打开。 本专栏默认读者已具备雷达系统的基本知识或者已阅读过雷达导论专栏中的文章。 1. 概述 SAR成像概述 星载SAR的各项指标解读(史上最全) SAR成像算法的实现途径与算力分析 2. SAR成像原理与SAR系统简介 雷达与分辨率 SAR成像原理与方法 SAR图像的形成和处理 SAR系统设计 3. 点目标仿真 点目标仿真(一)—— 数学模型 点目标仿真(二)—— Matlab仿真 4. 成像算法 更新中 雷达导论专

7452

9篇1章1节:中国居民健康与营养调查(CHNS)数据库的官网解析和数据下载(2026年版)

在探讨中国社会经济转型与人口健康变迁的学术领域中,中国健康与营养调查(CHNS) 是一个无法绕过的权威数据库。本文将带你深入了解CHNS的项目背景、庞大的数据体系,以及如何通过这两个核心网站获取关键的家庭、个人及社区层面的研究数据。

MD Code 1686

设计模式-责任链模式-Chain of Responsibility Pattern

创建一个抽象基类,定义处理请求的接口和设置下一个处理者的指针。

wesigj的博客 2384

【STM32Cube_14】使用硬件I2C读写环境光强度传感器(BH1750)

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设读取环境光强度传感器数据(BH1750)

Mculover666的博客(嵌入式) 7237

【设计模式】责任链模式(Chain of Responsibility Pattern)

责任链模式()是将链中的每一个节点看做成一个对象,每个节点处理的请求均不同,且内部自动维护一个下一个节点对象,当一个请求从链式的首端发出时,会沿着链路的路径一次传递给每一个节点对象,直至有对象处理这个请求为止。责任链模式是一种行为型设计模式。...

老男孩的架构路 538

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

设计模式中的责任链模式(Chain of Responsibility Pattern)

在软件开发中,经常会遇到需要按照顺序处理请求的情况,例如日志处理、权限控制、审批流程等。如果使用硬编码的 `if-else` 结构,代码将变得复杂且难以扩展。 **责任链模式(Chain of Responsibility Pattern)** 提供了一种**将请求的处理者组织成链式结构**的方法,使请求可以**沿着责任链传递,直到被某个处理者处理**,从而提高代码的灵活性和可扩展性。本文将详细介绍责任链模式的概念、应用场景,并通过 Python 代码示例展示其实现方式。

2489

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

设计模式之责任链模式(Chain of Responsibility Pattern)

What: 责任链模式也叫职责链模式。为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。 Why: 优点: 1.降低耦合度。它将请求的发送者和接收者解耦。 2.增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。 缺点: 1.责任...

qq_37212210的博客 502

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java设计模式——责任链模式【Chain of Responsibility Pattern】

Java设计模式、责任链模式、Chain of Responsibility Pattern

scorpio的博客 1095

23种设计模式——责任链模式(Chain of Responsibility Pattern)

本文介绍了23种经典设计模式之——责任链模式(Chain of Responsibility Pattern)的使用及说明

Meteors.的博客 883

设计模式之责任链模式【Chain Of Responsibility Pattern】

当客户端发出一个请求,有多个对象都有机会来处理这个请求,但是客户端不知道究竟谁会来处理他的请求时,这是就可以使用责任链模式来处理这种情况。 1、定义 使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。 2、使用场景 多个对象可以处理一个请求,但具体由哪个对象处理则在运行时动态决定。 在请求者不明确...

Rogera的博客 919

设计模式——责任链模式(Chain of Responsibility Pattern)+ Spring相关源码

每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

码鹿的记录 1013

设计模式:责任链模式(Chain of Responsibility Pattern)

责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。

TechNomad的博客 974

设计模式-12责任链模式Chain of Responsibility Pattern

责任链模式是一种行为设计模式,允许多个对象处理请求,避免请求发送者与接收者直接耦合。它将对象连成链,请求沿链传递直至被处理。适用于需要动态指定处理顺序、避免直接耦合的场景。结构包含处理者接口、抽象处理者和具体处理者。实现时,每个处理者决定是否能处理请求或传递给下一处理者。示例展示了采购审批流程,不同级别审批人根据金额限制处理请求,无法处理则转交上级。

d3y1`5 81_09 861

java设计模式---责任链模式(Chain of responsibility pattern)

java设计模式—责任链模式(Chain of responsibility pattern) 1. 概述 之前我们已经结束了创建型和结构型设计模式,接下来我们介绍行为型设计模式,行为型设计模式包含了11中,首先介绍的是责任链模式。该模式中包含了一些命令对象和一系列的处理对象,每一个对象都都保有对其下家的引用。如果我们将链中的每个节点看做是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从...

渔潭的博客 936

Java设计模式 十九 责任链模式 (Chain of Responsibility Pattern)

责任链模式通过将请求沿链传递,让多个对象有机会处理请求,避免了请求发送者与接收者的直接耦合。它使得对象的行为更加灵活,并且能够在不修改客户端代码的前提下,动态地改变处理流程。虽然责任链模式提供了更大的灵活性,但在链较长或处理较复杂时,可能导致处理效率降低,因此需要在适当的场景中使用。

空 1040

[设计模式] 责任链模式(Chain of Responsibility Pattern)

什么是责任链模式? 责任链模式是一种对象行为模式。顾名思义,责任链就是把承担不同责任的对象通过某种方式连接在一起形成一条链。当客户端把请求发送到这个责任链上的时候,本质上就是在链上不同的对象之间流转,直到链上的某个对象可以处理该请求,或者每个对象都处理该请求。 根据链上对象对请求的不同处理方式,责任链模式有两类: (1) 纯责任链模式 一个具体的处理者对象只能在两个行为中选择一个:要么承担全部责任,要么将责任推给下家。不允许出现某一个具体处理者对象在承担了一部分或者全部责任后,又将责任向下传递的情况。 一

asd13518662的博客 185

设计模式-责任链模式(Chain of Responsibility Pattern)

java 设计模式 责任链模式

weixin_43438824的博客 411
上一篇: RecycleView的缓存机制
下一篇: 软键盘相关问题总结
一杯清泉
博客等级 码龄11年 314粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值