这是《小游戏从0到1设计模式重构》系列内容第5篇,所有源码及资料在“程序员LIYI”公号回复“小游戏从0到1”获取。
上一章节,我们介绍的是创建型模式,主要关注对象的创建,而这一章节的行为型模式主要关注对象交互、通信和控制流。
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
代码也写了几年了,设计模式处于看了忘,忘了看的状态,最近对设计模式有了点感觉,索性就再学习总结下吧。
首先它可以对同一模块中有先后执行顺序要求的类或对象进行成链,以达到高聚合的目的。同时对于单一执行状态下的执行步骤,可以通过非状态模式的成链方式进行组装,便可以实现改变执行顺序的目的,让代码维护性变高。
责任链模式是一种行为型设计模式,也就是重点是处理数据,假设我们有一份数据,需要经过很多个节点处理,那么就会是以下这个样子:
责任链模式,顾名思义,就是一系列链式操作,就说明是由很多节点组成的链条,当有请求过来时,会顺着这条链一直往下执行,直到遇到符合条件的节点,下面我将以一个自己在项目中使用到的责任链模式的案例来进行讲解。
责任链模式是一种行为设计模式,用于将请求的发送者和接收者解耦,并将多个处理器对象组合成一条链,依次处理请求。在责任链模式中,每个处理器对象都包含了处理请求的逻辑,并将请求传递给下一个处理器对象,直到请求被处理完成或到达链的末尾。责任链模式允许请求的发送者不需要知道请求的接收者是谁,而请求的接收者也不需要知道请求的发送者是谁,从而实现了请求的分发、处理和传递。
责任链模式定义 : 为 请求 创建一个接收该 请求对象 的 链 , 链条中每个元素都是一个对象 ;
责任链模式(Chain of Responsibility)是一种对象的行为模式。
责任链模式描述的就是如何推卸责任,说的简洁点,就是踢皮球哈哈。举个例子,有时候,出了某件事,我们去解决,找到A,结果A踢皮球,说这不关我的事,去找B解决,然后我们就去找B,结果B也说,这跟我没关系,快去找C,就这样,我们就被踢来踢去,这就是责任链模式的思想,在找到正确的人解决之前,我们被不断的踢给一个有一个人,就是推卸责任。 上面的例子,可能有点贬义,但在实际编程中,有时候确实存在需要推卸责任的情况,,比如,当我们接受到一个请求时,当前的程序暂时无法处理这个请求,于是就需要把请求给别人去处理。如果是web开发人员,对此应该很熟悉,当服务器收到一个客户端的请求时,首先会解析请求,action层不会处理请求,而是将请求的参数等信息进行简单的解析处理,然后根据请求的内容信息等将请求具体转发给service去处理。 当一个人被要求做一件事的时候,如果他自己可以做,那他就自己做了,如果他自己做不了,那就转发给另一个人做,另一个人也是一样,如果他自己可以做,就做,不可以做,就给别人做。。。。。。 这就是责任链模式的基本思想
责任链模式通过创建一个处理链,将请求从链的起始点传递到链的末尾,直到有一个处理者能够处理该请求。每个处理者都有一个指向下一个处理者的引用,形成一个链式结构。当一个请求到达链的起始点时,责任链模式会按照一定的规则将请求传递给下一个处理者,直到找到能够处理该请求的处理者为止。
责任链模式应用场景非常多、比如拦截器、过滤器等等。但是要彻底理解责任链的实现原理还是有一定难度的,因此,责任链模式的实现原理也就成为了一道互联网大厂的高频面试题。今天,我给小伙伴们来详细地掰一掰,保证让你彻底搞明白,不服来战。
Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it. (为了避免请求者与响应者之间的耦合性,让每个对象都有处理请求的机会。把这些处理请求的对象连成一条链,并沿着这条链传递请求,直到有对象能够处理这个请求为止)
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,用于创建一条对象链,每个对象依次处理请求,直到请求被处理或到达链的末尾。这种模式允许你以松散耦合的方式将请求沿链传递,同时提供更灵活的处理方式。在本文中,我们将详细介绍责任链模式的概念、应用场景以及如何使用它来构建更复杂的请求处理逻辑。
在电商行业,促销活动是吸引用户、提升销售的重要手段。而对于一个电商平台而言,项目的上线流程尤为关键。在大促期间,项目的上线流程可能涉及多个层级的负责人审批,为了提高效率和减少人为错误,我们可以借助设计模式来优化这一流程。
责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象按照顺序处理请求,并且每个对象可以选择自己是否处理该请求或将其传递给下一个对象。这种模式将请求的发送者和接收者解耦,同时提供了更大的灵活性和可扩展性。
责任链模式(Chain of Responsibility)是设计模式的一种,属于行为型设计模式。
本文通过图书馆管理系统中,用户名校验、密码校验、需要增加问题,每次都要增加if判断语句,将其改用责任链模式进行链式调用,为了让代码更加的优雅,我们使用之前学过的建造者模式就代码进行改造。接着我们会介绍责任链模式在我们常用的框架中的运用,最后是责任链模式的优缺点和应用场景。
光看这段描述可能大家会觉得懵,简单来说就是该设计模式用于对某个对象或者请求进行一系列的处理,这些处理逻辑正好组成一个链条。
HashMap主要是用来处理键值对数据。随着JDK版本的更新,JDK1.8对HashMap对底层也做了一些优化。今天我带大家一起来结合源码,深入浅出HashMap工作原理。
责任链模式中,每个对象通过持有对下家的引用而链接起来,形成一条链条,串联起来多个处理对象。
责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它通过将请求的发送者和接收者解耦,使多个对象都有机会处理请求。在这个模式中,请求沿着一个处理链依次传递,直到有一个对象能够处理它为止。
我们有这样一个场景,假如你出差需要报销。你的报销单审批人依次是:项目经理、科室主任、部门负责人、财务负责人。当然你不需要知道每个审批人的姓名、电话号码、办公地址等信息。你不需要自己一个一个的去找这些审批人审批。
责任链模式是一种行为型模式,它允许多个对象来处理请求,从而避免了请求的发送者和接收者之间的直接耦合。
大家好,我是老田,今天我给大家分享设计模式中的责任链模式。用贴切的生活故事,以及真实项目场景来讲设计模式,最后用一句话来总结这个设计模式。
除了应用场景比较多的单例模式你能够信手拈来,其他的可能会觉得有点难以掌握。也许压根都没用过。
定义: 使多个对象都有机会处理请求, 从而避免了请求的发送者和接受者之间的耦合关系. 将这些对象连成一条链, 并沿着这条链传递该请求,直到有对象处理它为止
作者:Jet啟思 链接:https://juejin.im/post/5a126b146fb9a0450c490201 今天来说说程序员小猿和产品就关于需求发生的故事。前不久,小猿收到了产品的需求。 产品经理:小猿,为了迎合大众屌丝用户的口味,我们要放一张图,要露点的。 小猿:......露点?你大爷的,让身为正义与纯洁化身的我做这种需求,还露点。 产品经理:误会误会,是放一张暴露一点点的,尺寸不大。 小猿:尼玛~能说清楚些吗,需求模棱两可的。不干,我要上报boss。 产品经理也一阵无语,这豆丁的事还上报b
已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式)。
在阎宏博士的《JAVA与模式》一书中开头是这样描述责任链(Chain of Responsibility)模式的:
责任链模式 一、 概念 二、 引子 三、 结构 四、 具体案例 一、概念 责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到 链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织 和分配责任。 二、引子 从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐
很多情况下,在一个软件系统中可以处理某个请求的对象不止一个。例如审批工作流等,他们可以构成一条处理采购单的链式结构,采购单(可以看作是要处理的信息)沿着这条链进行传递,这条链就称为责任链。责任链可以是一条直线、一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求。链上的每一个对象都是请求处理者,责任链模式可以将请求的处理者组织成一条链,并让请求沿着链传递,由链上的处理者对请求进行相应的处理。在此过程中,客户端实际上无须关心请求的处理细节以及请求的传递,只需将请求发送到链上即可,从而实现请求发送者和请求处理者解耦。
是像我这样么,满屏的if else。稍有经验的开发人员都明白这样的代码违反了开闭原则,修改任何一个条件都需要改动代码,到后期极难维护。 那该如何做呢?有很多设计模式都是为了解决这样的情况,不过今天我要讲的是责任链模式。
今天主要是给大家分享一下两种设计模式,即责任链模式以及策略模式。至于为什么想着给大家分享这两种设计模式呢,这源于我之前对扫码场景的相关代码优化,下面我将结合我遇到这个的场景给大家讲一下这两种设计模式。
今天我们介绍的是责任链模式【Chain of Responsibility Pattern】。对于责任链模式理解起来还是比较容易的。例如在公司请假、三天以内部门经理批准即可,但是三到七天可能就需要总监批准了、七天以上需要副总裁批准。对于这么一个需求最初的解决方案就是if-else语句判断。但是 一旦请假的模式增加一种则需要对多重if-else进行修改,这就违背了开闭原则。这个时候就可以采用责任链模式来解决其问题。责任链模式为请求创建一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。
责任链模式(Chain of Responsibility Pattern)属于设计模式的行为型模式。责任链模式与多米诺骨牌有点类似,请求在链中从前向后传递,一直到最后一个。当然责任链的处理可以复杂的多。
不知道大家是怎么学习设计模式的,一般我都是用到的时候,或者接触到的时候才会去学。否则感觉学完就很容易就忘掉了,不能理解为什么要使用设计模式(因为没有真实的场景给我去使用)。
责任链模式是一种行为设计模式,旨在将请求的发送者和接收者解耦。在这种模式中,多个对象可以处理同一请求,但具体由哪个对象处理,则取决于运行时决定。这样的设计使得请求的处理者形成一条链,每个处理者都有机会处理请求或者将其传递给链中的下一个处理者。
在处理某个请求的时候,解决策略因条件不同而不同。这时,相对于使用if-else来区分不同的条件和对应的解决策略,我们可以使用责任链模式,将不同条件和对应的解决策略封装到一个类中,即不同的处理者。然后将这些处理者组成责任链,在当前处理者无法处理或不符合当前条件时,将请求传递给下一个处理者。
适用场景(核心):只要把你的请求抛给第一个处理者,不用关心谁处理的,并且最终会返回你一个结果。
使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
职责链模式(Chain of Responsibility):使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程,软件开发中的异常处理流程,web请求处理流程等各种各样的流程,可以考虑使用责任链模式来实现。
责任链模式是一种对象的行为模式,责任链模式实际上是一种处理请求的模式 它让多个处理器(对象节点)都有机会处理该请求,请求通过这条加工链进行一步步的处理后。输出最终的产品产出。
什么是责任链模式?生活中我们经常遇到这样的问题,比如请假审批需要层层上报处理、遇到问题各个部门甩赖扯皮,像这种,在事情没有被处理之前,会经过一系列阶段,类似于“踢皮球”似的。同样地,当一个请求到达时,在程序无法直接决定由哪个对象负责处理时,客户的请求就会形成一种链式传递,在链上的各个处理对象如果无法直接决定是否由其处理时,就会将请求再传递至下一个链对象,直到请求被处理或者被丢弃等等。这种处理链我们形象称其为“责任链”。
责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链
在王者荣耀商城中,玩家可以参与夺宝抽奖。夺宝抽奖分两种,一种是积分抽奖,另一种是钻石抽奖;在平常,两种夺宝抽奖方式均可以通过60钻石/积分抽奖一次,或者通过270钻石/积分连续抽奖5次;其中,当钻石夺宝幸运值达到201时,可以获得稀有王者水晶,当积分夺宝幸运值达到361时,可以获得稀有荣耀水晶;玩家可以使用王者水晶或荣耀水晶换取特定的英雄、皮肤、装备等。 在很多情况下,可以处理某个请求的对象不止一个。很多对象都可以处理申请,而且它们构成一条链,请求沿着这条链传递,这条链就称为职责链。 针对以上描述,王者荣耀中的夺宝就是责任链模式在王者荣耀中应用的例子。在这个问题中,玩家通过点击60钻石/积分抽一次或者270钻石/积分抽五次实现抽奖结果。
领取专属 10元无门槛券
手把手带您无忧上云