Java设计模式系列--责任链模式(应用)
原文网址:Java设计模式系列--责任链模式(应用)_IT利刃出鞘的博客-CSDN博客
简介
说明
本文介绍Java设计模式中的责任链模式的一些使用场景。
责任链模式的好处
- 符合单一职责原则
- 每个功能都作为链路上的一个节点
- 符合开闭原则
- 有新的功能的时候再添加一个新的处理器即可,不需要动其他的处理器。
项目实例
在下边两个项目场景中,我用到了责任链模式。
1. 用户权限
用户经过Authentication和Authorization之后,还需要校验用户是否被禁用、是否允许多端登录等逻辑。
2. 发短信
发短信需要检查:是否在黑名单中,是否超过了每天最高的发短信次数,平台是否配置了短信功能等。
框架的应用
Spring Servlet的过滤器和拦截器。
JS的事件冒泡。
责任链与for循环的思考
责任链模式大概是这样的:
- 指定各个处理器的顺序
- 将所有处理器注册到一个集合中。
- 确定本处理器是否处理,是否调用下一个处理器
对于后端来说,可以将各个处理器注册到Spring容器,然后将其作为List注入,可以通过@Order来控制顺序。这样一来,其实可以通过for循环来完成跟责任链模式一样的作用,而且比责任链用起来更加简洁。
设计模式作为一种思路,其实本身应该脱离框架,适用于多种编程语言、多种框架。理解它,可以对很多类似的场景融会贯通。
Java设计模式系列--责任链模式(应用)相关推荐
- Java设计模式作业-责任链模式
Java设计模式作业-责任链模式:Web过滤器 文章目录 前言 一.类图 二.代码及测试结果 1.Trouble类 2.Support类 3.CharSupport类 4.TypeTransformS ...
- JAVA设计模式之责任链模式(职责链模式)
转自JAVA设计模式之责任链模式(职责链模式) 责任链/职责链(Chain of Responsibility)模式的定义 为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理 ...
- Java设计模式之责任链模式(简单易懂)
前言: 责任链模式(Chain of Responsibility): 使多个对象都有机会处理同一请求,从而避免请求的发送者和接受者之间的耦合关系,每个对象都是一个处理节点,将这些对象连成一条链,并沿 ...
- 轻松学习Java设计模式之责任链模式
我们的态度是:每天进步一点点,理想终会被实现. 前言 设计模式,可能很多人都是看到代码知道怎么回事,但是离开代码再让其说出来,估计就有点含糊其词了,包括我自己在内.Android中其实用到的设计模式也 ...
- Java设计模式之责任链模式(二)
所有设计模式传送门 本文将一起介绍学习下设计模式之责任链模式.责任链模式是指使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有 ...
- 折腾Java设计模式之责任链模式
责任链模式 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计 ...
- JAVA设计模式之责任链模式
责任链模式在设计模式里边属于比较难的设计模式,主要用于对一个对象进行一系列的操作,每个操作相互独立.这一系列的操作组成了一个操作链,每个操作都有其具体的职责,即是一个责任链. UML图如下 先用一个简 ...
- Java 设计模式之责任链模式实现的三种方式
点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 The worst way to miss someone is to be ...
- 用王者荣耀来理解java设计模式之责任链模式
在王者荣耀商城中,玩家可以参与夺宝抽奖.夺宝抽奖分两种,一种是积分抽奖,另一种是钻石抽奖:在平常,两种夺宝抽奖方式均可以通过60钻石/积分抽奖一次,或者通过270钻石/积分连续抽奖5次:其中,当钻石夺 ...
最新文章
- 经过标定后的ESP32对于节能信标组充电过程测量
- Minor GC、Major GC和Full GC之间的区别(转)
- flex 3 使用手册
- 从四个层面落地,成为受欢迎、可信赖、懂技术的产品经理
- 从xml中返回的对象,和new 返回的对象时不同的。
- [Unity] StartCoroutine 无法启动协程的可能原因:没有使用 AddComponent<T>() 初始化 Monobehaviour
- 《对Java的分析总结》-Java中的垃圾回收机制中的标记-清除算法 (五)
- oracle 中查找不连续的数的最前一个值
- android 扫描SDCard.
- MySQL5.7.的备份恢复方案。
- python语言开发环境配置理论_python语言开发环境配置
- 【渝粤教育】国家开放大学2019年春季 0692-22T化工设备机械基础 参考试题
- 计算机学报应用研究,组推荐系统及其应用研究-计算机学报.PDF
- HDU-4747 二分+线段树
- React使用iconfont阿里巴巴矢量图库
- 软件测试人员常用的sql语句(四)
- 原生JS判断两个元素是否为兄弟节点
- matlab gram schmidt,如何在 MATLAB 中用 行代码实现 Gram-Schmidt 正交化
- LTE:RA-RNTI;T-CRNTI;C-RNTI
- SQL 注释语句 (--与/*...*/)
热门文章
- 看完这些,你还敢说你已经了解iPhone 6s?
- 猿创征文|独特且教训的技术成长之路
- java线程池合理设置最大线程数和核心线程数
- AI-900认证考试攻略
- IDEA 快捷键、快捷配置
- 粉笔网iPhone端使用的第三方开源库
- avws扫描出来的漏洞怎么利用_如何用Acunetix网站漏洞扫描软件快速进行扫描?告诉您几个小妙招!...
- LeetCode 1260. 二维网格迁移
- 压缩文件格式介绍zip, rar, gz, tar.gz, tgz, bz2, Z, tar等
- js打开新窗口被拦截问题