GoF设计模式(十七) - 责任链模式

C++——设计模式 面向对象的优点和缺点 面向对象的三大特点 设计模式的六大原则 单例模式(线程安全) 工厂方法模式 适配器模式 代理模式 观察者模式 策略模式 备忘录模式 模板模式 状态模式 责任链模式 装饰模式 命令模式 阅读详情

前言

责任链模式(Chain of Responsibility Pattern)避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。这种类型的设计模式属于行为型模式。

模式所涉及的角色

  • 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。
  • 具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。
  • 客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。

代码实现 

抽象处理者

public abstract class Handler {
    private Handler next;

    /**
     * 处理请求的方法
     */
    public abstract void handleRequest(String request);

    public Handler getNext() {
        return next;
    }

    public void setNext(Handler next) {
        this.next = next;
    }
    
}

具体处理者

public class ConcreteHandler1 extends Handler{

    @Override
    public void handleRequest(String request) {
        if ("请假".equals(request)) {
            System.out.println("具体处理者1负责处理该请求!");
        } else {
            if (getNext() != null) {
                getNext().handleRequest(request);
            } else {
                System.out.println("没有人处理该请求!");
            }
        }
    }
}


public class ConcreteHandler2 extends Handler{

    @Override
    public void handleRequest(String request) {
        if ("加薪".equals(request)) {
            System.out.println("具体处理者2负责处理该请求!");
        } else {
            if (getNext() != null) {
                getNext().handleRequest(request);
            } else {
                System.out.println("没有人处理该请求!");
            }
        }
    }
}

 客户端

@Test
    void contextLoads() {
        //组装责任链
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();
        handler1.setNext(handler2);
        //提交请求
        handler1.handleRequest("加薪");
    }

源码 

https://download.youkuaiyun.com/download/javanbme/84994963 

支付系统中的设计模式07:责任链模式 作为一种行为设计模式,责任链模式可以将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下一个处理者。举个例子,假设用户可以在平台上下单购买商品,而且后台运营人员也有权限访问用户创建的订单。如果后续需要增加一些订单验证步骤,比如同一个IP一天内只能下单一次、通过规则引擎判断订单是否存在刷单嫌疑、判断多级缓存中的订单是否一致等等。这样的话,每次新增一些看似必要的功能都会让代码变得更加臃肿混乱,维护困难。 阅读详情

相关推荐

大话设计模式之爱你一万年:系列文章 - 导读

大话设计模式之爱你一万年课程总介绍 课程介绍 六大设计模式原则,23种经典设计模式,实战 实战 再实战,手写代码为你一一解析。结合多年项目经验,为你带来设计模式的最佳指导。 课程目标 通过学习能掌握23种设计模式,规范编程风格,提高优化程序结构和效率的能力。 学习收获 (1)理解设计模式的意义和实现 (2)写出诗一般的程序,代码优雅,新增功能轻松无障碍。 (3)加深对Java语言的使用熟练度 (4)提升程序员对项目开发过程中遇到问题的认知和解决问题的思路及方式...

悟纤学院 1万+

GO设计模式 - 行为型 - 责任链模式

简介 简单来说责任链模式就是将一个处理过程看成一个处理链,处理过程沿着处理链进行,每个处理结点都是一个处理者,当操作到某个结点时,由该节点的处理者进行处理,处理完后交给下一个处理者 例子 比如游戏世界你买一样东西,也可以用责任链模式来做,在游戏微服务时代,各个业务模块划分为不同的BC(如有不懂,可以先去了解领域驱动设计) 首先,调用仓库BC检验你的元宝是否足够,不够就报错,够就进行下一步 其次,去商店BC(也就是本BC)进行购买 再次,调用仓库BC进行扣除元宝 ...

好吗好的~的技术博客 632

golang 线上事故

golang 线上事故 最近公司要做大促的一些活动。并且单量,qps持续上涨。之前使用的是django python 语言做的一个服务端。目前已经部署的国家里面最多的国家会有300+个实例。大促期间还可能会增加一个实例数。这么多的实例部署,回滚的时间都会特变长,除了问题也不好定位。并且如此多的一个机器,连接数* 实例数也会导致DB等其他服务扛不住这么大的并发。所以决定上go服务解决性能问题。 ...

lcf枫的博客 1537

golang设计模式---责任链模式

设计模式-责任链模式

IT艺术家-rookie的博客 977

RT-2(robotics-transformer2)论文--阅读笔记

谷歌RT-2机器人论文的阅读笔记。

weixin_61255639的博客 1828

上交开源装甲板识别代码分析

GitHub - xinyang-go/SJTU-RM-CV-2019: 上海交通大学 RoboMaster 2019赛季 视觉代码这里着重分析主函数main.cpp与装甲板识别部分的工程文件armer文件夹。由于未完全分析,所以对于其中log.h、options.h中的函数并不清楚,在分析时会跳过这些内容。该文章重点分析的是思路,部分函数中的数学逻辑、数据处理思路这里不详细解释(没能力)所有思维导图通过 知犀知犀思维导图 - 知犀官网 (zhixi.com)原创。

qq_42104961的博客 1320

GOF23设计模式之职责链模式

责任链,沿着链传递链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象。通过这种模式可以实现 请假审批 需要逐级这类的场景下使用,比if else 结构更加清晰

开心杨的个人博客 406

潜行游戏设计:核心机制与关卡设计解析

潜行游戏作为动作游戏的重要分支,通过视觉遮蔽、声音传播和AI行为树等复杂系统,为玩家提供独特的策略体验。视觉隐蔽系统采用视野锥和光照值的双重判定,声学传播模型模拟距离衰减和材质穿透,而敌人AI行为树则包含巡逻、警戒和团队协作等状态节点。这些技术不仅提升了游戏的真实感和挑战性,还在《合金装备》《刺客信条》等经典作品中得到广泛应用。潜行游戏的关卡设计强调多路径拓扑结构和环境叙事元素,通过沙漏模型和动态难度调节,平衡自由度和开发成本。未来,基于ML的适应性AI和物理模拟的隐蔽系统将成为创新方向。

weixin_42497762的博客 179

Golang设计模式——11责任链模式

package ResponsibilityChain import ( "strconv" ) type Handler interface { Handler(handlerID int) string } type handler struct { name string next Handler handlerID int } func NewHandler(name string, next Handler, handlerID int) *handler {

清风 1316

Protege入门指南:从下载到本体构建实战

本文是Protege的入门实战指南,详细介绍了如何从官网下载安装这款由斯坦福大学开发的免费本体构建工具,并通过经典的“披萨本体”案例,系统讲解了类、属性、个体和公理四大核心要素。文章还深入解析了Protege的工作界面,并引导读者亲手创建一个简易的“公司人员组织”本体,完成从定义概念、建立关系到逻辑推理的全流程,是知识图谱与本体建模初学者的理想教程。

weixin_29093169的博客 698

8155平台multi-display(多屏显示)原理与配置

8155平台多屏互动原理与配置

漂流瓶の海岸 1606

【寒江雪】Go实现责任链模式

Chain of Responsibility Pattern   责任链模式为请求创建了一个接收者对象的链。处理请求的对象是一系列链条,或者一个集合。每个处理节点都保存有其他处理节点的引用。接收到请求的时候,会判断该请求是否需要自己处理,处理完毕传给下一个处理节点,有点像流水线作业。 例子   让我举一个复杂一点的例子。我就不用链条的形式来写了,我用一个map来保存处理器的引用。  ...

寒江雪的博客 2338

大模型运维实战:从GPU选型到推理服务稳定落地

大模型服务进入生产环境后,运维对象从传统进程转向GPU显存、KV Cache、推理吞吐等动态资源。显存利用率、首token延迟、并发队列深度等指标,直接影响模型服务的质量与成本。理解推理框架的内存分配机制、掌握监控告警与自动化扩容手段,是保障服务稳定的关键。这类能力广泛应用于企业私有化部署、智能客服、知识库问答等场景,帮助运维团队从被动救火转向主动容量规划与性能调优。本文围绕大模型运维的完整路线,梳理从硬件选型、推理部署到监控排障的实战经验,并算清一份真实项目的长期成本账。

weixin_29054245的博客 238

Java与设计模式(二十七)行为型--责任链模式

一概述 二解决的问题 三模式中的角色 四模式解读 五JDK涉及到的设计模式 六模式总结 优点 缺点 适用场景 一、概述 责任链模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 二、解决的问题 如果有多个对象都有可能接受请求,可以避免请求发送者与接收者耦合在一起。 三、模式中的角

keep_trying的专栏 320

嵌入式工程师成长之路(2)——电路设计

为什么你的电源模块总是发热炸机?DC/DC和LDO选型的“潜规则”你踩坑了吗? LM2596降压芯片用错电容导致输出振荡?LED恒流驱动设计让灯珠寿命缩水50%?24V转12V方案成本超预算被老板狂喷?——这些血泪教训,谁能懂得!

云轩阁 13万+

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

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

java设计模式耿祥义_《java设计模式课件耿祥义》-公开·课件.ppt

封面 第一章 设计模式简介 1.1 什么是设计模式 1.2 设计模式的起源 1.3 GOF之著作 1.4 学习设计模式的重要性 1.5 合理使用模式 第二章 面向对象的几个基本原则 2.1 面向抽象原则 第二章 面向对象的几个基本原则 第二章 面向对象的几个基本原则 2.2 开-闭原则 2.3 高内聚-低耦合原则 第四章 命令模式 一 、 概述 ...

weixin_33764387的博客 512

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

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

深入浅出设计模式【导语、内含23种设计模式和踩坑经验】

设计模式是软件工程中解决常见问题的可复用方案模板,能帮助开发者编写清晰、灵活、可维护的代码。本文将通过系列文章深入解析经典设计模式,包括单例、工厂方法、抽象工厂等,涵盖核心概念、适用场景、类图分析、实现方式及最佳实践。结合Java语言、开源框架和业务案例,旨在为开发者提供理论与实战结合的深度指南,提升系统设计能力。适合希望夯实基础或优化设计的中高级开发者参考。

NeoLshu的博客 971

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

学习 二十三种设计模式 看这一篇就够了~

二十三种设计模式笔记 链接: 点我跳转.

Burial_DH的博客 205

【设计模式 14】责任链:谁来拍板

摘要:本文通过一个企业采购审批流程卡顿17天的案例,揭示了传统审批制度的弊端。作者提出采用责任链模式重构流程:将审批人串联成链,每个节点只需判断"签或传",无需了解全链条。这种设计使流程调整更灵活,加层级只需插入链中,改条件仅需调整单个节点。最终新流程将审批时间从17天压缩到5天,体现了责任链模式"治乱在于编制"的核心价值——每个处理者专注自身职责,通过链式传递维持整体秩序。

qq_34733864的博客 827

设计模式学习笔记(目录篇)

设计模式学习笔记(目录篇) 为了方便查看,特此将设计模式学习笔记系列单独做一个目录。   1   设计模式学习笔记(一:命令模式) 2   设计模式学习笔记(二:观察者模式) 3   设计模式学习笔记(三:装饰模式) 4   设计模式学习笔记(四:策略模式) 5   设计模式学习笔记(五:适配器模式) 6   设计模式学习笔记(六:责任链模式) 7   设计模式学习笔记(七:外观...

weixin_34183910的博客 133

(原创)无废话C#设计模式系列文章

(原创)无废话C#设计模式之一:开篇(原创)无废话C#设计模式之二:Singleton(原创)无废话C#设计模式之三:Abstract Factory(原创)无废话C#设计模式之四:Factory Method(原创)无废话C#设计模式之五:Prototype(原创)无废话C#设计模式之六:Builder(原创)无废话C#设计模式之七:Adapter(原创)无废话C#设计模式之八:Fa...

weixin_30328063的博客 76

尚硅谷Scala (17)

设计模式。

m0_63961750的博客 158

Java基础面试题总结《三》

SPI全称是(服务提供者接口)。它是一种基于接口的动态扩展机制。简单来说,就是 Java 定义了一套标准接口,但具体的实现交给第三方(开发者或厂商)去完成。系统运行时,会自动发现并加载这些实现类,而不需要硬编码在代码里。目的:确保逻辑相等的对象拥有相同的哈希码,从而能被正确地存入和取出哈希集合。原则只要参与了哈希运算(作为 Key 或集合元素),就必须同时重写这两个方法。策略模式和观察者模式都属于行为型设计模式。

qq_55862497的博客 259

解锁工厂模式:工厂模式探秘

解锁工厂模式:工厂模式探秘

卓越之识论道,平常之识论事,狭隘之识论人 1161

GOLANG设计模式值责任链模式

来看下责任链模式的定义:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。可以看到它能够把请求者与处理者解耦了,请求者不会知道哪一个处理了它的请求。这个模式偏向于一个请求对应一个处理者,而观察者模式偏向于一个变动,多个观察者都能够监测到。 handler代码: package chainResponsibili...

weixin_30746129的博客 1581
上一篇: GoF设计模式(十六) - 迭代器模式
下一篇: Linux下安装Yearning及相关环境配置
让程序飞
博客等级 码龄10年 8831粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让程序飞

您的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值