设计模式之责任链模式

简介: 本篇文章是设计模式专题的第十一篇文章,我会将遇到的设计模式都一一总结在该专题下,我会把自己对每一种设计模式的感悟写下来,以及在实际工作中我们该如何去灵活应用这些设计模式,欢迎大家关注。本篇文章我们就来讲一讲责任链模式。

责任链模式的简单介绍

责任链模式是为了帮助我们解决链条反应的一种模式,使相关责任的接口像多米诺骨牌一样,触发连锁反应。

责任链模式的类图:

image.png

责任链模式中各个角色的介绍:

  • 抽象的处理器:定义处理器的结构
  • 具体的处理器:继承抽象的处理器,重写处理请求

责任链模式的具体实现思路

  • 创建抽象的处理器
  • 创建具体的处理器,重写处理方法,使其具有向下调用其他处理器的能力
  • 创建客户端,构建责任链,提交处理请求

责任链模式的具体实现方案

// 抽象处理器
public abstract class Handler {
    
    private Handler next;
    
    public void setNext(Handler next) {
        this.next = next;
    }
    
    public Handler getNext() {
        return next;
    }
    
    // 处理请求的方法
    public abstract void handleRequest(String request);
}
// 具体处理器1
public class ConcreteHandler1 extends Handler {
    public void handleRequest(String request) {
        if ("one".equals(request)) {
            System.out.println("处理器1负责处理该请求!");
        } else {
            if (getNext() != null) {
                getNext().handleRequest(request);
            } else {
                System.out.println("没有人处理该请求!");
            }
        }
    }
}
// 具体处理器2
public class ConcreteHandler2 extends Handler {
    public void handleRequest(String request) {
        if ("two".equals(request)) {
            System.out.println("处理器2负责处理该请求!");
        } else {
            if (getNext() != null) {
                getNext().handleRequest(request);
            } else {
                System.out.println("没有人处理该请求!");
            }
        }
    }
}
// 客户端
public class Client {
    public static void main(String[] args) {
        // 构建责任链
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();
        handler1.setNext(handler2);
        // 提交请求
        handler1.handleRequest("two");
    }
}

责任链模式的优缺点

优点

  • 进行对象之间的解耦。发送者和接收者也无须拥有对方的明确信息。
  • 增强了给对象指派职责的灵活性。当流程发生变化,可以动态地改变链内的成员或者调动它们的次序,也可动态地新增或者删除责任。
  • 增强了系统的可扩展性。根据需求增加新的请求处理类即可,满足开闭原则。
  • 简化了对象之间的连接。对象不需要知道链的结构。
  • 明确各类的责任范围,每个类只需要做自己职责之内的事,职责之外的交给下个类去做,符合类的单一职责原则。

缺点

  • 对于较长的责任链,系统性能会受到一定影响。
  • 无法保证每个请求一定被处理。由于一个请求没有明确的接收者,所以不能保证它一定会被处理。
  • 职责链建立要靠客户端来维护,增加了客户端的复杂性,可能会造成循环调用等失误。
  • 不易观察期运行时特征,对排除问题进行了一定的干扰。

责任链模式的适用场景

  1. 有多个处理器可以处理同一个请求,具体哪个处理器处理该请求由运行时刻自动确定。
  2. 在不明确指定处理器的情况下,向多个处理器中的每一个都提交一个请求。
  3. 动态指定一组处理器处理请求。

责任链模式总结

责任链模式就是巧妙的借助链表这种数据结构,让一系列处理者构成一个单链表,从而按照配置好的顺序,进行依次调用。使其能够避免请求的发送者与接收者耦合在一起,让多个请求的接收者可以构成一条链路,对请求按照链路的顺序进行处理。

目录
相关文章
|
6月前
|
设计模式 Java
【设计模式系列笔记】责任链模式
责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者能够处理它。每个处理者都有一个对下一个处理者的引用。责任链模式常用于处理请求的场景,例如在一个请求需要经过多个步骤或者多个对象来处理的情况下。
78 0
|
6月前
|
设计模式 Java
【设计模式】责任链模式
【设计模式】责任链模式
|
6月前
|
设计模式
【设计模式】责任链模式
【1月更文挑战第27天】【设计模式】责任链模式
|
27天前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
55 9
|
15天前
|
设计模式 JavaScript Scala
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
36 0
|
26天前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
本教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速上手Kotlin的读者,推荐查阅“简洁”系列教程。本文通过学生会经费申请的例子,介绍了责任链模式及其在Kotlin中的实现,并使用偏函数进行了改进,使代码更加简洁和灵活。
14 0
|
29天前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
37 0
|
1月前
|
设计模式 JavaScript Scala
Kotlin学习笔记 - 改良设计模式 - 责任链模式
Kotlin学习笔记 - 改良设计模式 - 责任链模式
42 0
|
2月前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)
|
1月前
|
设计模式 JavaScript Scala
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
26 0

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    43
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    50
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    58
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    38
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    63
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    58
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    42
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    50
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    110
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    78
  • 下一篇
    无影云桌面