原文网址:Java设计模式系列--责任链模式(应用)_IT利刃出鞘的博客-CSDN博客

简介

说明

本文介绍Java设计模式中的责任链模式的一些使用场景。

责任链模式的好处

  1. 符合单一职责原则

    1. 每个功能都作为链路上的一个节点
  2. 符合开闭原则
    1. 有新的功能的时候再添加一个新的处理器即可,不需要动其他的处理器。

项目实例

在下边两个项目场景中,我用到了责任链模式。

1. 用户权限

用户经过Authentication和Authorization之后,还需要校验用户是否被禁用、是否允许多端登录等逻辑。

2. 发短信

发短信需要检查:是否在黑名单中,是否超过了每天最高的发短信次数,平台是否配置了短信功能等。

框架的应用

Spring Servlet的过滤器和拦截器。

JS的事件冒泡。

责任链与for循环的思考

责任链模式大概是这样的:

  1. 指定各个处理器的顺序
  2. 将所有处理器注册到一个集合中。
  3. 确定本处理器是否处理,是否调用下一个处理器

对于后端来说,可以将各个处理器注册到Spring容器,然后将其作为List注入,可以通过@Order来控制顺序。这样一来,其实可以通过for循环来完成跟责任链模式一样的作用,而且比责任链用起来更加简洁。

设计模式作为一种思路,其实本身应该脱离框架,适用于多种编程语言、多种框架。理解它,可以对很多类似的场景融会贯通。

Java设计模式系列--责任链模式(应用)相关推荐

  1. Java设计模式作业-责任链模式

    Java设计模式作业-责任链模式:Web过滤器 文章目录 前言 一.类图 二.代码及测试结果 1.Trouble类 2.Support类 3.CharSupport类 4.TypeTransformS ...

  2. JAVA设计模式之责任链模式(职责链模式)

    转自JAVA设计模式之责任链模式(职责链模式)​​​​​​​ 责任链/职责链(Chain of Responsibility)模式的定义 为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理 ...

  3. Java设计模式之责任链模式(简单易懂)

    前言: 责任链模式(Chain of Responsibility): 使多个对象都有机会处理同一请求,从而避免请求的发送者和接受者之间的耦合关系,每个对象都是一个处理节点,将这些对象连成一条链,并沿 ...

  4. 轻松学习Java设计模式之责任链模式

    我们的态度是:每天进步一点点,理想终会被实现. 前言 设计模式,可能很多人都是看到代码知道怎么回事,但是离开代码再让其说出来,估计就有点含糊其词了,包括我自己在内.Android中其实用到的设计模式也 ...

  5. Java设计模式之责任链模式(二)

    所有设计模式传送门 本文将一起介绍学习下设计模式之责任链模式.责任链模式是指使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有 ...

  6. 折腾Java设计模式之责任链模式

    责任链模式 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计 ...

  7. JAVA设计模式之责任链模式

    责任链模式在设计模式里边属于比较难的设计模式,主要用于对一个对象进行一系列的操作,每个操作相互独立.这一系列的操作组成了一个操作链,每个操作都有其具体的职责,即是一个责任链. UML图如下 先用一个简 ...

  8. Java 设计模式之责任链模式实现的三种方式

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 The worst way to miss someone is to be ...

  9. 用王者荣耀来理解java设计模式之责任链模式

    在王者荣耀商城中,玩家可以参与夺宝抽奖.夺宝抽奖分两种,一种是积分抽奖,另一种是钻石抽奖:在平常,两种夺宝抽奖方式均可以通过60钻石/积分抽奖一次,或者通过270钻石/积分连续抽奖5次:其中,当钻石夺 ...

最新文章

  1. 经过标定后的ESP32对于节能信标组充电过程测量
  2. Minor GC、Major GC和Full GC之间的区别(转)
  3. flex 3 使用手册
  4. 从四个层面落地,成为受欢迎、可信赖、懂技术的产品经理
  5. 从xml中返回的对象,和new 返回的对象时不同的。
  6. [Unity] StartCoroutine 无法启动协程的可能原因:没有使用 AddComponent<T>() 初始化 Monobehaviour
  7. 《对Java的分析总结》-Java中的垃圾回收机制中的标记-清除算法 (五)
  8. oracle 中查找不连续的数的最前一个值
  9. android 扫描SDCard.
  10. MySQL5.7.的备份恢复方案。
  11. python语言开发环境配置理论_python语言开发环境配置
  12. 【渝粤教育】国家开放大学2019年春季 0692-22T化工设备机械基础 参考试题
  13. 计算机学报应用研究,组推荐系统及其应用研究-计算机学报.PDF
  14. HDU-4747 二分+线段树
  15. React使用iconfont阿里巴巴矢量图库
  16. 软件测试人员常用的sql语句(四)
  17. 原生JS判断两个元素是否为兄弟节点
  18. matlab gram schmidt,如何在 MATLAB 中用 行代码实现 Gram-Schmidt 正交化
  19. LTE:RA-RNTI;T-CRNTI;C-RNTI
  20. SQL 注释语句 (--与/*...*/)

热门文章

  1. 看完这些,你还敢说你已经了解iPhone 6s?
  2. 猿创征文|独特且教训的技术成长之路
  3. java线程池合理设置最大线程数和核心线程数
  4. AI-900认证考试攻略
  5. IDEA 快捷键、快捷配置
  6. 粉笔网iPhone端使用的第三方开源库
  7. avws扫描出来的漏洞怎么利用_如何用Acunetix网站漏洞扫描软件快速进行扫描?告诉您几个小妙招!...
  8. LeetCode 1260. 二维网格迁移
  9. 压缩文件格式介绍zip, rar, gz, tar.gz, tgz, bz2, Z, tar等
  10. js打开新窗口被拦截问题