责任链模式

devtools/2024/10/15 5:28:43/

 责任链设计模式

定义

责任链模式为请求创建了一个接收者对象的链。允许将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。

请求在一个链条上处理,链条上的受理者处理完毕之后决定是继续往后传递还是中断当前处理流程。

适用场景

适用于多节点的流程处理,每个节点完成各自负责的部分,节点之间不知道彼此的存在,比如OA的审批流,java web开发中的Filter机制。举一个生活中的例子,租房的时候遇到了所谓的黑中介,租的时候感觉自己是上帝,但是坏了东西找他修的时候就像个孙子一样,中介让客户找门店客服,门店客服又让客户找房东,房东又让客户找她家老公,最终好说歹说才把这事了了(租房一定要找正规中介)。

实践经验

比如有一个业务是校园团餐的聚合支付,业务流程很简单,1.学生打开手机付款码支付,2.食堂大妈使用机具扫付款码收款。大学食堂有个背景是这样的,食堂有补贴,菜品比较便宜,所以学校是不愿意让社会人士去学校食堂消费的,鉴于此,在支付之前加了一套是否允许支付的检验逻辑,大体如下:

1.某档口只允许某类用户用户消费,比如教师档口只允许教师消费,学生档口不允许校外用户消费;2.某个档口一天只允许某类用户消费几次,比如教师食堂一天只允许学生消费一次;3.是否允许非清真学生消费,比如某些清真餐厅,是不允许非清真学生消费的;

针对这几类情况建立了三类过滤器,分别是:

SpecificCardUserConsumeLimitFilter:按用户类型判断是否允许消费

DayConsumeTimesConsumeLimitFilter:按日消费次数判断是否允许消费

MuslimConsumeLimitFilter:非清真用户是否允许消费

判断逻辑是先通过SpecificCardUserConsumeLimitFilter判断当前用户是否可以在此档口消费,如果允许继续由DayConsumeTimesConsumeLimitFilter判断当天消费次数是否已用完,如果未用完继续由MuslimConsumeLimitFilter判断当前用户是否满足清真餐厅的就餐条件,前面三条判断,只要有一个不满足就提前返回。

部分代码如下:

public boolean canConsume(String uid,String shopId,String supplierId){//获取用户信息,用户信息包含类型(student:学生,teacher:老师,unknown:未知用户)、名族(han:汉族,mg:蒙古族)UserInfo userInfo = getUserInfo(uid);    //获取消费限制信息,限制信息包含是否允许非清真消费、每种类型的用户是否允许消费以及允许消费的次数ConsumeConfigInfo consumeConfigInfo = getConsumeConfigInfo(shopId,supplierId)     // 构造消费限制过滤器链条ConsumeLimitFilterChain filterChain = new ConsumeLimitFilterChain();filterChain.addFilter(new SpecificCardUserConsumeLimitFilter());filterChain.addFilter(new DayConsumeTimesConsumeLimitFilter());filterChain.addFilter(new MuslimConsumeLimitFilter());boolean checkResult = filterChain.doFilter(filterChain, schoolMemberInfo, consumeConfigInfo);    //filterChain.doFilter方法public boolean doFilter(ConsumeLimitFilterChain filterChain,UserInfo userInfo,    ConsumeConfigInfo consumeConfigInfo ){  //迭代调用过滤器if(index<filters.size()){return filters.get(index++).doFilter(filterChain, userInfo, consumeConfigInfo);}    }    //

http://www.ppmy.cn/devtools/25879.html

相关文章

【AIGC调研系列】LLaVA++整合Phi-3和Llama-3能够实现什么

LLaVA能够为Phi-3和Llama-3带来的主要好处包括&#xff1a; 视觉处理能力的增强&#xff1a;通过整合Phi-3和Llama-3模型&#xff0c;创建了具备视觉处理能力的Phi-3-V和Llama-3-V版本&#xff0c;这意味着这些模型现在能够理解和生成与图像相关的内容[1]。这种能力的增加&…

一个docker配置mysql主从服务器

这也就是因为穷&#xff0c;不然谁用一个docker配置主从&#xff0c;哈哈 既然成功了就记录下。过程挺折磨人的。 首先要保证你的电脑安装好了docker 为了保证docker当中主从能正常连网&#xff0c;现在docker里面创建一个网络环境 docker network create --driver bridge mysq…

富格林:正确手段阻挠虚假套路

富格林认为&#xff0c;现货黄金一直以来都拥有一大批支持者&#xff0c;这些投资者喜欢现货黄金市场很大一部分原因是觉得这个市场相对规律。为什么这么说呢&#xff1f;因为在现货黄金市场中只要严格遵循这些原则&#xff0c;既可以帮助我们阻挠虚假套路&#xff0c;更能助力…

设计模式:接口隔离原则(Interface Segregation Principle,ISP)介绍

接口隔离原则&#xff08;Interface Segregation Principle&#xff0c;ISP&#xff09;是面向对象设计原则之一&#xff0c;它强调一个类不应该依赖于它不需要的接口。接口隔离原则的核心思想是将大的接口拆分成更小的、更具体的接口&#xff0c;客户端应该仅依赖于它们需要使…

北斗引路,太阳为源,定位报警,保护渔业,安全护航!

2022年1月&#xff0c;农业农村部发布《“十四五”全国渔业发展规划》明确提出&#xff0c;到2025年&#xff0c;渔业质量效益和竞争力明显增强&#xff0c;渔业基础设施和装备条件明显改善&#xff0c;渔业治理体系和治理能力现代化水平明显提高&#xff0c;实现产业更强、生态…

C#使用NModbus4库创建Modbus TCP Slave(服务器)简单示例

本文续上篇Codesys—标准库ModbusTCP Master(客户端)配合C#的NModbus4库的通讯示例 链接&#xff1a;https://blog.csdn.net/wushangwei2019/article/details/136375234?spm1001.2014.3001.5501 上篇描述在Codesys端的Modbus TCP Master(客户端)的设备添加、IO映射、通讯简单…

java的容器简介

容器的概念 容器指的是用于容纳收藏某种物体并进行一定程度管理的器具&#xff0c;这种东西在我们的日常生活中是非常常见的&#xff0c;比如我们吃饭时用到的锅碗瓢盆这些都是容器的范畴&#xff0c;可见容器是一个非常宽泛的概念。 在java中我们将容器的概念抽象出来&#xf…

蚂蚁集团智能凭证安全产品通过信通院能力测评,获最高评级

4月28日&#xff0c;中国信通院“人工智能”高质量发展研讨会在北京召开。会上&#xff0c;中国信通院发布“可信AI”系列评测结果。蚂蚁集团智能凭证防伪检测安全产品“蚂蚁光鉴”全项通过“可信AI-OCR服务智能化”的评估&#xff0c;获得最高评级&#xff08;增强级&#xff…