设计模式:责任链模式

这篇具有很好参考价值的文章主要介绍了设计模式:责任链模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象按照顺序处理请求,直到其中一个对象能够处理该请求为止。责任链模式将请求发送者和接收者解耦,使得多个对象都有机会处理请求,同时避免了请求发送者与接收者之间的直接耦合关系。

在责任链模式中,请求被沿着一个链传递,每个对象都有机会处理请求或将其传递给链中的下一个对象。每个对象在收到请求后,可以选择处理请求或将其传递给下一个对象。这样,请求会依次经过链中的对象,直到有一个对象能够处理它为止。

组件

责任链模式通常包含以下角色:

  1. 抽象处理者(Handler):定义了处理请求的接口,通常包含一个指向下一个处理者的引用。
  2. 具体处理者(Concrete Handler):实现了处理请求的方法,如果自己无法处理请求,则将其传递给下一个处理者。

代码示例

abstract class Handler {
    private Handler nextHandler;
     public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }
     public void handleRequest(int request) {
        if (canHandle(request)) {
            processRequest(request);
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        }
    }
     protected abstract boolean canHandle(int request);
     protected abstract void processRequest(int request);
}
// 具体处理者A
class ConcreteHandlerA extends Handler {
    protected boolean canHandle(int request) {
        return request >= 0 && request < 10;
    }
     protected void processRequest(int request) {
        System.out.println("ConcreteHandlerA 处理请求:" + request);
    }
}
// 具体处理者B
class ConcreteHandlerB extends Handler {
    protected boolean canHandle(int request) {
        return request >= 10 && request < 20;
    }
     protected void processRequest(int request) {
        System.out.println("ConcreteHandlerB 处理请求:" + request);
    }
}
// 具体处理者C
class ConcreteHandlerC extends Handler {
    protected boolean canHandle(int request) {
        return request >= 20 && request < 30;
    }
     protected void processRequest(int request) {
        System.out.println("ConcreteHandlerC 处理请求:" + request);
    }
}
// 客户端代码
public class Main {
    public static void main(String[] args) {
        // 创建责任链
        Handler handlerA = new ConcreteHandlerA();
        Handler handlerB = new ConcreteHandlerB();
        Handler handlerC = new ConcreteHandlerC();
        handlerA.setNextHandler(handlerB);
        handlerB.setNextHandler(handlerC);
         // 发送请求
        handlerA.handleRequest(5);
        handlerA.handleRequest(15);
        handlerA.handleRequest(25);
    }
}

在上述示例中,我们定义了抽象处理者(Handler)和具体处理者(ConcreteHandlerA、ConcreteHandlerB、ConcreteHandlerC)。每个处理者都有一个指向下一个处理者的引用,通过 setNextHandler() 方法进行设置。

在客户端代码中,我们创建了一个责任链,并将请求发送给第一个处理者(handlerA)。每个处理者根据自己的条件判断是否能处理请求,如果可以处理,则进行处理;否则将请求传递给下一个处理者。

这个示例展示了如何使用Java实现责任链模式,通过责任链的方式依次处理请求,直到找到能够处理请求的处理者为止。

源码中使用

责任链模式在源码中有很多应用。以下是一些常见的源码中使用责任链模式的情况:

  1. Java中的异常处理机制:Java中的异常处理机制就是一种责任链模式的应用。当一个异常被抛出时,会从当前方法开始向上查找匹配的异常处理器,直到找到能够处理该异常的处理器为止。
  2. Servlet中的过滤器(Filter):Servlet中的过滤器也使用了责任链模式。多个过滤器按照一定的顺序形成一个责任链,每个过滤器可以对请求进行处理或者传递给下一个过滤器进行处理。
  3. Spring框架中的拦截器(Interceptor):Spring框架的拦截器也是一种责任链模式的应用。拦截器可以在请求处理前后进行一些额外的操作,如权限验证、日志记录等。
  4. Android中的事件分发机制:Android中的事件分发机制也使用了责任链模式。事件从顶层View开始向下传递,每个View可以对事件进行处理或者传递给下一个View进行处理。
    这些是责任链模式在源码中的一些常见应用。责任链模式通过形成一个责任链,将请求的处理逻辑拆分成多个处理者,每个处理者负责处理或传递请求。这样可以实现解耦和灵活的处理逻辑。

优缺点

优点:

  1. 解耦请求发送者和接收者:责任链模式将请求的发送者和接收者解耦,发送者无需知道具体的接收者,只需要将请求发送给责任链的第一个处理者即可。
  2. 可扩展性和灵活性:责任链模式可以动态地添加、修改或删除处理者,灵活地调整责任链的结构和顺序,以满足不同的需求。
  3. 可以对请求进行过滤和处理:责任链模式允许每个处理者对请求进行过滤和处理,可以根据不同的条件选择是否处理请求,以及如何处理请求。
  4. 可以降低耦合度:责任链模式将请求的发送者和接收者解耦,减少了它们之间的直接依赖关系,从而降低了耦合度。
    缺点:
  5. 请求可能未被处理:责任链模式没有保证请求一定会被处理,如果责任链没有正确配置或者没有处理者能够处理该请求,请求可能会被忽略。
  6. 可能存在性能问题:当责任链较长时,请求需要依次经过每个处理者,可能会导致性能下降。同时,过多的处理者也会增加系统的复杂性。
  7. 可能导致调试困难:由于请求的处理者是动态变化的,当出现问题时,可能需要跟踪整个责任链来定位问题,增加了调试的难度。

总结

责任链模式通过将请求的发送者和接收者解耦,提供了一种灵活和可扩展的处理机制。它可以对请求进行过滤和处理,降低耦合度。然而,责任链模式也可能导致请求未被处理、性能问题以及调试困难。在使用责任链模式时,需要根据具体情况权衡其优缺点,确保合理使用。文章来源地址https://www.toymoban.com/news/detail-732237.html

到了这里,关于设计模式:责任链模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【设计模式】Java 设计模式之责任链模式(Chain of Responsibility)

    责任链模式(Chain of Responsibility) 一、概述 责任链模式是一种行为设计模式,它允许请求在对象链中传递。每个对象都有机会处理该请求,并且能将其传递给链中的下一个对象。这种模式为请求创建了一个处理对象的链,并沿着这条链传递该请求,直到有一个对象处理它为止

    2024年03月22日
    浏览(42)
  • 【玩转23种Java设计模式】行为型模式篇:责任链模式

    软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接:【玩转23种Java设计模式】学习目录汇总

    2024年02月13日
    浏览(34)
  • Java设计模式—责任链模式(Chin of Responsibility)

    目录 前言 一、责任链模式的简介 二、责任链模式的概念 三、责任链模式的作用 四、责任链模式的优、缺点 1.责任链模式的优点 2.责任链模式的缺点 五、责任链模式的应用场景 六、代码案例 UML类图  1.定义一个请求枚举类  2.定义一个请求类 3.定义一个抽象处理接口 4、定

    2024年02月08日
    浏览(34)
  • Java设计模式-责任链(Chain of Responsibility)模式

    Java责任链(Chain of Responsibility)设计模式是指很多处理对象构成一个链,链中前一个对象指向后一个对象。请求在链中传递,一个请求可以被一个或者多个对象处理。调用方(即客户端)不知道请求会被链中的哪个对象处理,所以责任链模式可以方便组织责任链而不影响调用

    2024年02月16日
    浏览(45)
  • Java 大厂八股文面试专题-设计模式 工厂方法模式、策略模式、责任链模式

            在平时的开发中,涉及到设计模式的有两块内容,第一个是我们 平时使用的框架 (比如spring、mybatis等),第二个是我们自己开发业务使用的设计模式。         面试官一般比较关心的是你在开发过程中, 有没有使用过设计模式,或者你在简历上写了关于设计

    2024年02月10日
    浏览(56)
  • Java设计模式之责任链模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设计模式之责任链模式 OA系统采购审批需求 传统方案解决OA系

    2024年02月06日
    浏览(40)
  • Java设计模式之行为型-责任链模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 4.1、在Java中实现 4.2、在SpringBoot中实现  五、总结  责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行发送。请求会被链上每个处理者处理,直到请求被处理完毕。该模式主要解决的是请求的发送者和

    2024年02月15日
    浏览(39)
  • 【设计模式】责任链模式

    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处

    2024年02月12日
    浏览(38)
  • 设计模式——责任链模式

    使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有对象处理它为止。 优点 能将请求和处理分开。请求者可以不用知道是谁处理的,处理者可以不用知道请求的全貌,两者解耦提高系

    2024年02月15日
    浏览(40)
  • 设计模式—责任链模式

    一、待解决问题 : 减少代码中 if else 语句,降低代码圈复杂度或深度,增强可读性。 1、需求背景: 采购订单创建,需要验证采购员、物料、供应商、供应商的银行账号等信息。如采购员权限到期、或供应商失效等问题,都无法下单。 2、代码如下: 学习使用责任链模式后

    2024年02月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包