行为设计模式之职责链模式

【地铁上的设计模式】--行为型模式:职责链模式 行为模式是面向对象编程中,一组用于处理对象间交互的设计模式。行为模式主要关注的是对象之间的责任分配和行为控制。模板方法模式(Template Method Pattern)模板方法模式定义了一个算法框架,将一些步骤的具体实现交由子类去完成,从而使得算法框架和步骤的具体实现分离开来。策略模式(Strategy Pattern)策略模式定义了一系列算法,将每个算法封装成独立的对象,使它们可以互换。观察者模式(Observer Pattern) 阅读详情

概述

职责链模式(chain of responsibility pattern) 定义: 避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求.将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止.

在职责链模式中,多个处理器(也就是刚刚定义中说的“接收对象”)依次处理同一个请 求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再 传递给 C 处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职 责,所以叫作职责链模式。

原理

职责链模式结构:
职责链结构图

职责链模式主要包含以下角色:

  • 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接(链上的每个处理者都有一个成员变量来保存对于下一处理者的引用,比如上图中的successor) 。
  • 具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。
  • 客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。

代码实现

class Context {
public:
    std::string name;
    int day;
};
class IHandler {
public:
    virtual ~IHandler() {}
    void SetNextHandler(IHandler *next) { 
        next = next;
    }

    bool Handle(const Context &ctx) {
        if (CanHandle(ctx)) {
            return HandleRequest(ctx);
        } else if (GetNextHandler()) {
            return GetNextHandler()->Handle(ctx);
        } else {
            // err
        }
        return false;
    }
protected:
    virtual bool HandleRequest(const Context &ctx) = 0;
    virtual bool CanHandle(const Context &ctx) =0;
    IHandler * GetNextHandler() {
        return next;
    }
private:
    IHandler *next;
};


class HandleByMainProgram : public IHandler {
protected:
    virtual bool HandleRequest(const Context &ctx){
        //
        return true;
    }
    virtual bool CanHandle(const Context &ctx) {
        //
        if (ctx.day <= 10)
            return true;
        return false;
    }
};

class HandleByProjMgr : public IHandler {
protected:
    virtual bool HandleRequest(const Context &ctx){
        //
        return true;
    }
    virtual bool CanHandle(const Context &ctx) {
        //
        if (ctx.day <= 20)
            return true;
        return false;
    }
};
class HandleByBoss : public IHandler {
protected:
    virtual bool HandleRequest(const Context &ctx){
        //
        return true;
    }
    virtual bool CanHandle(const Context &ctx) {
        //
        if (ctx.day < 30)
            return true;
        return false;
    }
};

class HandleByBeauty : public IHandler {
protected:
    virtual bool HandleRequest(const Context &ctx){
        //
        return true;
    }
    virtual bool CanHandle(const Context &ctx) {
        //
        if (ctx.day <= 3)
            return true;
        return false;
    }
};

小结

本篇主要写了职责链相关的内容,包括职责链的概念,职责链的原理,以及职责链的代码实现。还是挺详细的,部分内容来源于这里,有兴趣可以去看看。当然,还是要自己去积累一些。OK,结束。

uniapp:K线图,支持H5,APP K线,1分钟搞定。备注详细,无需理解,直接复制即可。 阅读详情

相关推荐

基于cat12和SPM12进行VBM&SBM数据分析笔记1——数据预处理

基于cat12数据分析基础教程笔记 今年是小编步入研究生生活的第一年,研究方向待定,但主要以磁共振成像为主,以后会不断地总结这方面的知识,涉及MRI扫描,数据分析基础方法理论,软件操作教程,文献阅读笔记总结等等,用来记录我的研究生三年学习过程。编写尽量简洁明了,通俗易懂,本就是小白,也能体会小白的痛。不过这也要谢谢一个人手动@小白(网名),是他教我要把自己所学的写下来,讲出来才能真正的做到输入和输出,查漏补缺。而cat12软件操作是我面临的第一个数据分析的训练,写的可能也不会非常到位,还望各位专业人士指出改

Sophia2023的博客 4万+

【设计模式精讲】行为型模式之职责链模式

职责链模式(chain of responsibility pattern) 定义: 避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求.将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止.在职责链模式中,多个处理器(也就是刚刚定义中说的“接收对象”)依次处理同一个请 求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再 传递给 C 处理器,以此类推,形成一个链条。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

JAVA + 海康威视SDK + FFmpeg+ SRS 实现海康威视摄像头二次开发

海康威视SDK接入方案摘要 本文介绍了使用海康威视官方SDK开发物联网平台摄像头接入功能的完整方案。系统采用Java后端集成HCNetSDK控制摄像头,通过FFmpeg将RTSP流转为RTMP推送到SRS流媒体服务器,前端基于HTTP-FLV协议实现视频播放。文章详细说明了开发准备工作,包括SDK下载、SRS部署、FFmpeg安装等关键步骤,并提供了数据库表设计和接口定义。核心部分展示了如何集成海康SDK,包括提取必要代码、加载DLL文件、配置打包插件等具体实现细节,最终形成了一套支持实时预览、回放和下载的

2401_83057947的博客 2259

设计模式(行为型设计模式——职责链模式)

职责链模式将请求的发送者和接受者解耦了。客户端不需要知道请求处理者的明确信息,甚至不需要知道链的结构,它只需要将请求进行发送即可。处理者不需要知道链的结构,只需要明白他的后续者是谁就可以了。这样就简化了系统中的对象。职责链模式能够非常方便的动态增加新职责或者删除职责。不能保证每个请求一定被处理。由于一个请求没有明确的接收者,所以不能保证它一定会被处理,该请求可能一直传到链的末端都得不到处理。

weixin_44675056的博客 1950

Python小白也能玩转迅投QMT量化交易?手把手教你从安装到第一个策略

本文为零基础Python用户提供了上手迅投QMT量化交易平台的完整指南。从Python 3.6环境配置、QMT客户端获取安装,到核心概念讲解,并手把手教你编写并回测一个经典的双均线交易策略,帮助初学者快速迈出量化交易的第一步。

weixin_29103191的博客 763

中兴FTTR光猫变简易OLT:低成本搭建全光监控与局域网实战指南

本文详细介绍了如何将中兴FTTR光猫改造为简易OLT设备,实现低成本全光监控与局域网扩展。通过LOID认证、桥接模式设置及终端数破解,用户可利用二手设备搭建高性能光纤网络,适用于远程监控和长距离组网场景,显著降低部署成本。

chair的专栏 2022

【设计模式】职责链模式(责任链模式) 行为型模式,纯与不纯的职责链模式

职责链模式是一种行为型设计模式,用于将请求的发送者和接收者解耦,通过构建处理对象链来动态分配请求。该模式适用于多级审批、事件处理等场景,如请假审批系统可按照请假天数由不同管理者处理(经理≤5天,主管≤10天,HR>10天)。核心组件包括抽象处理者(定义处理接口和链结构)和具体处理者(实现请求处理逻辑)。模式优势在于灵活调整处理流程,支持动态增减处理节点,降低系统耦合度。典型实现包含设置后继处理者方法和请求传递机制。

weixin_44131922的博客 806

AIGC时代的必备技能:提示词工程(Prompt Engineering)全面指南

本文主要介绍了AIGC时代的重要技能——提示词工程(Prompt Engineering)。文章首先定义了提示词的概念,强调其作为人类与AI沟通桥梁的重要性,并详细阐述了提示词的功能特性,包括输入、大模型处理和输出三个环节。接着,文章探讨了提示工程的重要性,如提高输出质量、节省资源和时间等。随后,文章深入分析了提示词的基本构成要素,包括指令、上下文、输入数据和输出指示符,并提出了提示词的五大基本原则:清晰性与具体性、提供充足的上下文、明确任务与目标、考虑受众和迭代思维。最后,文章介绍了提示词的七大常见技巧

weixin_43178406的博客 27万+

十八、设计模式之职责链模式(行为型)

十八、职责链模式(行为型) 职责链模式概述 Chain of Responsibility(CoR)模式也叫职责链模式、责任链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式。 职责链模式的应用场景 例1:比如客户Client要完成一个任务,这个任务包括a,b,c,d四个部分。首先客户Cl...

William 320

【深度学习新浪潮】为什么OpenClaw这么吃token?

OpenClaw 高 Token 消耗的核心是 Agent 多轮思考、工具调用上下文累积,以及平台内置的模板/多模型协同开销;PD 分离在 OpenClaw 中可针对性解决长上下文 Prefill 阻塞、KV Cache 复用低效问题,是提升其推理效率的核心优化手段,主要落地在长上下文处理与生成阶段解耦、KV Cache 集中管理、动态资源调度三个方向。

专注:太空算力、AI infra、异构调度、大模型成本工程 418

MATLAB代码实现了船舶航线优化的功能,使用混合遗传算法(结合模拟退火算法)来寻找从大连港到格拉斯通港的最优航线,同时考虑了船舶的参数、气象数据(风速、风向、有效波高、波浪阻力系数等)对航行的影响

这段MATLAB代码主要实现了船舶航线优化的功能,使用混合遗传算法(结合模拟退火算法)来寻找从大连港到格拉斯通港的最优航线,同时考虑了船舶的参数、气象数据(风速、风向、有效波高、波浪阻力系数等)对航行的影响。通过以上步骤,该代码能够找到一条在考虑船舶性能和气象条件下,从大连港到格拉斯通港的较优航线,最小化燃油消耗和航行时间的加权和。

AI的内部世界的博客 512

设计模式(十四)行为型:职责链模式详解

职责链模式(Chain of Responsibility Pattern)是 GoF 23 种设计模式中的行为型模式之一,其核心价值在于将多个处理对象(处理器)连接成一条链,使请求沿着链传递,直到被某个处理器处理为止。

谦与谦寻的神隐 1112

Zookeeper+Hadoop+Spark+Flink+Kafka+Hbase+Hive 完全分布式高可用集群搭建(保姆级超详细含图文) 附安装包网盘下载

Hadoop+Spark+Flink+Zookeeper+Kafka+Hbase+Hive完全分布式高可用集群搭建 Hadoop高可用集群搭建 Spark高可用集群搭建 Flink高可用集群搭建 Zookeeper高可用集群搭建 Kafka高可用集群搭建 Hbase高可用集群搭建 Hive高可用集群搭建 mysql搭建 jdk部署 大数据集群环境搭建

Mr.L-OAM的博客 2万+

【设计模式】【行为型模式】职责链模式(Chain of Responsibility)

职责链模式是一种行为设计模式,它允许你将请求沿着一条链传递,直到有对象处理它为止。每个对象都有机会处理请求,或者将其传递给链中的下一个对象。职责链模式:把多个处理对象连成一条链,请求按顺序传递,谁适合处理就处理,处理不了就传给下一个。优点解耦:发请求的不用关心谁来处理,处理者之间也不互相依赖。灵活:能动态调整链条顺序,或增删处理步骤。单一职责:每个处理者只做自己该做的事。缺点可能没人处理:链条没配好时,请求可能“走完全场”也没结果。性能问题:链条太长时,传递过程拖慢速度。调试麻烦。

flzjkl的博客 1398

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【设计模式-行为型】职责链模式

说到职责链模式,我头脑中想到的例子就是电影《人体蜈蚣》、还有项目的分包商

qq_36038282的博客 1192

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

行为型设计模式08-职责链模式

一天一个设计模式,今天学习职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

十二间记,知不足而奋斗,望远山而前行。千里不辞行路远,时光早晚到天涯。 304

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

行为型设计模式------职责链模式

文章目录什么是行为型设计模式职责链模式引子 什么是行为型设计模式 行为型设计模式是对在不同的对象之间的责任划分和算法的抽象化。它不仅关注类和对象的结构,而且重点关注他们之间的相互作用。 通过行为型设计模式,可以更加清晰的划分类和对象的职责,并研究系统在运行时不同实例对象之间的交互。在系统运行的过程中,对象的存在并不是孤立的,它可以通过相互通信和协作来完成某些复杂的功能,一个对象的运行也会影响到其他...

machine_Heaven的博客 488

行为型设计模式——职责链模式

例如大学里的奖学金审批,学长在向辅导员提交审批表之后首先是辅导员签字审批,然后交给系主任审批签字,接着院长审批,最后可能是校长来审批,在这个过程中奖学金申请表可以看出一个请求对象,而不同级别的审批者都可以处理该请求对象,除了辅导员外,学生不需要一一与其他审批者交互,等待结果即可。允许某个请求被一个具体处理者部分处理后再向下传递,或者一个具体处理者处理完某请求后其后继处理者可以继续处理该请求,而且一个请求可以最终不被任何处理者对象所接收。请求在这个链上传递,直到链上的某一个对象决定处理此请求。

2502_93606049的博客 395

设计模式之职责链模式(行为型)

文章目录一、行为型模式二、职责链模式定义三、职责链模式角色四、简单实例 一、行为型模式 介绍职责链模式之前先介绍一下行为型设计模式,因为按照GoF模式分类,职责链就是一种行为型设计模式。行为型设计模式就是主要表示类或者对象之间的关联关系,分为类行为型和对象行为型。类行为型一般都是通过类的继承或者多态等等方式实现。对象行为型就是通过对象的聚合等等关联实现。 二、职责链模式定义 职责链模式是一种对象行...

Nicky's blog 3111

C++设计模式之行为型模式:职责链模式(Chain of Responsibility)

职责链模式是一种解耦请求发送者和接收者的行为设计模式,通过构建处理链实现请求的动态分发。核心思想是"请求沿链传递,能处理则处理",包含抽象处理者、具体处理者和客户端三个角色。以请假审批系统为例,组长、经理、总监和总经理组成处理链,各自处理不同天数的请假请求。该模式灵活可扩展,支持动态调整处理流程,但需注意避免请求未被处理的情况。

bkspiderx的博客 925

设计模式 行为型---职责链模式

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ...

guohao_Kwok的博客 143

设计模式14——行为型模式之职责链模式

定义:职责链模式(Chain OfResponsibility Pattern),使从个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理安为止。 类型:行为型模式。 概述:          职责链模式,行为型模式,说明其主要是通过行为来表现的。这里的行为,也可以理解为方法(Method)。职责链模式,将一堆处

飞鹤的程序员人生 1325

设计模式(三):行为型模式之职责链模式

行为型模式(BehavioralPattern)是对在不同的对象之间划分责任和算法的抽象化。 行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。 通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。 在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能, 一个对象在运行时也将影响到其他对象的运行。 职责链模式

Joselynzhao 1619

【设计模式】——行为型模式——职责链模式

职责链模式 行为特征很明显,谁做什么很清楚 一个请求可以有多个对象处理 动机 奖学金审批机制,一层一层向上 或者树形结构 或者环形结构 定义 对象行为型模式 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求 结构 抽象处理者:自己聚合自己,链式,下一个还是自己 具体处理者:实现抽象处理者,通常有个判断来处理请求 分析 将请求的处理者组织成一条链,让请求沿着链传递 客户端无需关心请求处理细节以及请求的传递——发送者和请求者解耦 链是客户自己建造的 新增处理者要更改客户端和重新建链 实

Dylan's Blog 265
上一篇: FFmpeg之转码
下一篇: 行为设计模式之状态模式
1随便写写1
博客等级 码龄16年 2261粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值