Java设计模式 _行为型模式_责任链模式

一、责任链模式

1、责任链模式
责任链模式(Chain of Responsibility Pattern)是一种行为型模式。该模式会为请求创建一个接收者对象的链。在这个责任链里,通常每个接收者都包含对另一个接收者的引用,如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推而形成的链式响应。

2、优点
(1)、降低耦合度:请求发送方无需关注处理请求体,直接使用链处理。
(2)、代码更灵活,可扩展能力比较强。

3、实现思路
(1)、定义规范接口(包含目标方法,和设置下一个接收对象的方法)
(2)、编写各种实现类,实现目标方法(逻辑:本级能处理就处理,处理不了转发给下一级处理)
(3)、创建链路类,也要实现规范接口,同时构造生成链路的方法
(4)、使用链路调用方法

二、代码示例

1、代码场景
卖商品的场景:销售员最多卖5个,商店最多可卖100个,区域总部最多可卖10000个,中国总部不限制数量。要求不管用户买多少个都能实现。

// 1、定义规范
public abstract class Sailer {public Sailer nestSailer;    // 定义下一接收对象属性public void setNest(Sailer nestSailer) {   // 设置下一个接收对象this.nestSailer = nestSailer;}abstract void sail(int num);  // 目标方法
}
// 2.1、销售员实现类
public class PersonSailer extends Sailer {public static int MAX_NUM = 5;@Overridepublic void sail(int num) {if (num < MAX_NUM) {System.out.println("销售员最大可卖数量为" + MAX_NUM + ",本次卖出数量为:" + num);} else {this.nestSailer.sail(num);}}
}
// 2.2、商店实现类
public class ShopSailer extends Sailer {public static int MAX_NUM = 100;@Overridepublic void sail(int num) {if (num < MAX_NUM) {System.out.println("商店最大可卖数量为" + MAX_NUM + ",本次卖出数量为:" + num);} else {this.nestSailer.sail(num);}}
}
// 2.3、区域总部实现类
public class AreaSailer extends Sailer {public static int MAX_NUM = 10000;@Overridepublic void sail(int num) {if (num < MAX_NUM) {System.out.println("地区总部最大可卖数量为" + MAX_NUM + ",本次卖出数量为:" + num);} else {this.nestSailer.sail(num);}}
}
// 2.4、中国总部实现类
public class ChinaSailer extends Sailer {@Overridepublic void sail(int num) {System.out.println("中国总部售卖不限量,本次卖出数量为:" + num);}
}
// 3、生成销售链
public class SailerChain extends Sailer{private static Sailer sailerChain;   // 销售链static {    // 初始化生成销售链Sailer chinaSailer = new ChinaSailer();Sailer areaSailer = new AreaSailer();Sailer shopSailer = new ShopSailer();Sailer personSailer = new PersonSailer();personSailer.setNest(shopSailer);shopSailer.setNest(areaSailer);areaSailer.setNest(chinaSailer);sailerChain = personSailer;}@Overridevoid sail(int num) {sailerChain.sail(num);}
}
// 4、测试,使用销售炼卖,而不是具体的实体对象卖public static void main(String[] args) {SailerChain chain = new SailerChain();chain.sail(3);chain.sail(30);chain.sail(3000);chain.sail(300000);}

运行结果:
在这里插入图片描述
可以看到,通过销售链可以根据卖出数量调用不同的方法。

2、总结
当多个实现类都可以处理某种类型请求时,可以根据请求的条件来决定最终由哪一个类去处理这个请求,如本例的责任链模式就是一种实现方式。责任链模式的链路生成思路是通过内置了下一个对象的引用来实现的。当条件满足时直接处理业务,不满足就放给下一个接收者去处理,或者某些场景下也可以是处理完业务也放给下一个链路去处理(如:错误日志和全量日志),具体需要根据业务去改造即可。

学海无涯苦作舟!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/681484.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

又一个限时免费生成图片的AI平台

网址 https://jimeng.jianying.com/ai-tool/image/generate 抖音官方的文升图&#xff0c;用抖音登录就可以&#xff0c;每天送60积分&#xff0c;目前看文生图好像是限时免费。 随手试了一下&#xff0c;速度很快&#xff0c;质量也还可以&#xff0c;背靠大厂&#xff0c;…

出货300万片后,智舱界「小高通」浮出水面

‍作者 |张祥威 编辑 |德新 2024年北京车展&#xff0c;本土芯片公司开始截击外企供应商。 很长一段时间内&#xff0c;汽车行业智驾芯片看英伟达&#xff0c;座舱芯片看高通。英伟达Orin系列广受欢迎&#xff0c;高通8155席卷主流智能汽车&#xff0c;8295更是被视为最强配置…

AMEYA360代理:稳先微车规WSD7025AD双通道高边智能开关介绍

高边开关是一种保护电子电路在过电流异常时免受电击穿破坏的电子元器件&#xff0c;与传统常规的保险丝不同&#xff0c;它通过负载电流检测防止系统组件因电流过大而造成短路损坏&#xff0c;在不损坏或恶化的条件下确保负载电流始终可控&#xff0c;提高汽车电气系统的可靠性…

【SpringBoot整合系列】SpringBoot整合RabbitMQ-基本使用

目录 SpringtBoot整合RabbitMQ1.依赖2.配置RabbitMQ的7种模式1.简单模式&#xff08;Hello World&#xff09;应用场景代码示例 2.工作队列模式&#xff08;Work queues&#xff09;应用场景代码示例手动 ack代码示例 3.订阅模式&#xff08;Publish/Subscribe&#xff09;应用…

雪球期权是什么意思?你了解雪球期权吗?

今天期权懂带你了解雪球期权是什么意思&#xff1f;你了解雪球期权吗&#xff1f;雪球期权属于场外期权的一种&#xff0c;交易的方式只能通过线下跟券商询价的方式进行&#xff0c;类似场外个股期权的交易方式。 雪球期权是什么意思&#xff1f; 雪球期权&#xff0c;顾名思义…

按键精灵纯本地离线文字识别插件

目的 按键精灵是一款可以模拟鼠标和键盘操作的自动化工具。它可以帮助用户自动完成一些重复的、繁琐的任务&#xff0c;节省大量人工操作的时间。但按键精灵是不包含图色功能&#xff0c;无法识别屏幕上的图像&#xff0c;根据图像的变化自动执行相应的操作。本篇文章主要讲解下…

数据分析——业务数据描述

业务数据描述 前言一、数据收集数据信息来源企业内部数据源市场调查数据源公共数据源和第三方数据源 二、公司内部数据客户资料数据销售明细数据营销活动数据 三、市场调查数据观察法提问法实验法 四、公共数据五、第三方数据六、数据预处理七、数据清洗丢弃部分数据补全缺失的…

OpenBayes 一周速览|Apple 开源大模型 OpenELM 上线;字节发布 COCONut 首个全景图像分割数据集,入选 CVPR2024

公共资源速递 This Weekly Snapshots &#xff01; 5 个数据集&#xff1a; * COCONut 大规模图像分割数据集 * THUCNews 新闻数据集 * DuConv 对话数据集 * 安徽电信知道问答数据集 * Sentiment Analysis 中文情感分析数据集 2 个模型&#xff1a; * OpenELM-3B-Inst…

Linux与windows网络管理

文章目录 一、TCP/IP1.1、TCP/IP概念TCP/IP是什么TCP/IP的作用TCP/IP的特点TCP/IP的工作原理 1.2、TCP/IP网络发展史1.3、OSI网络模型1.4、TCP/IP网络模型1.5、linux中配置网络网络配置文件位置DNS配置文件主机名配置文件常用网络查看命令 1.6、windows中配置网络CMD中网络常用…

ifconfig命令找不到 command not found

问题 今天解决虚拟机的网络问题后&#xff0c;使用ifconfig发现报错命令未找到 解决方案 输入yum install ifconfi的程序安装包 yum install ifconfig 如果显示没有可用软件包 ifconfig&#xff0c;错误&#xff1a;。 就输入yum search ifconfig匹配安装包程序 yum searc…

[C++核心编程-01]----C++内存四区详细解析

目录 前言 正文 01-内存区域简介 02-全局区 03-栈区 04-堆区 05-new操作符 总结 前言 当程序运行时&#xff0c;操作系统会为程序分配一块内存空间&#xff0c;这块内存空间被划分为不同的区域&#xff0c;每个区域有其独特的作用…

SRM系统供应链库存协同提升企业服务水平

SRM系统供应链库存协同是一种以提高供应链整体效率和竞争力为目标的管理方法。它涉及到企业与供应商之间的紧密合作&#xff0c;以实现库存优化、成本降低、风险分担和灵活响应市场变化等目标。 一、SRM供应链库存协同的概念和特点 SRM供应链库存协同是指企业与供应商之间通过…