大企业门户网站建设/seo网络推广案例

大企业门户网站建设,seo网络推广案例,黄骅港一期煤码头潮汐表,wordpress 不要可视化责任链设计模式 🚩什么是责任链设计模式?🚩责任链设计模式的特点🚩责任链设计模式的结构🚩责任链设计模式的优缺点🚩责任链设计模式的Java实现🚩代码总结🚩总结 🚩什么是…

责任链设计模式

  • 🚩什么是责任链设计模式?
  • 🚩责任链设计模式的特点
  • 🚩责任链设计模式的结构
  • 🚩责任链设计模式的优缺点
  • 🚩责任链设计模式的Java实现
  • 🚩代码总结
  • 🚩总结

🚩什么是责任链设计模式?

责任链设计模式(Chain of Responsibility Pattern) 是一种 行为型设计模式,它允许多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。

使用场景

  • 当需要 多个对象可以处理同一个请求,但具体由哪个对象处理在运行时动态决定时

  • 当需要 在不明确指定接收者的情况下向多个对象中的一个提交请求

  • 当需要 动态指定一组对象处理请求 时(如审批流程、异常处理等)

🚩责任链设计模式的特点

  • 解耦请求发送者和接收者:发送者无需知道具体由哪个对象处理请求

  • 动态组合处理链:可以动态地添加或修改处理请求的责任链

  • 灵活性高:可以灵活地分配责任或改变处理顺序

  • 多种处理方式:请求可以被链中的某个对象处理,也可以不被任何对象处理

🚩责任链设计模式的结构

责任链模式主要包含以下部分:

  • Handler(抽象处理者):定义处理请求的接口,通常包含设置下一个处理者的方法和处理请求的方法

  • ConcreteHandler(具体处理者):实现处理请求的具体逻辑,如果不能处理则转发给下一个处理者

  • Client(客户端):创建处理链并向链头的处理者提交请求

图例:

在这里插入图片描述

🚩责任链设计模式的优缺点

✅ 优点

  • 降低耦合度:请求发送者只需知道链中的第一个处理者

  • 增强灵活性:可以动态地增加或修改处理链

  • 简化对象间的连接:每个处理者只需保持一个指向其后继者的引用

  • 分配责任更灵活:可以自由分配责任或改变责任顺序

❌ 缺点

  • 请求可能不被处理:如果没有处理者能够处理请求,它可能会到达链的末端并被丢弃

  • 性能问题:较长的责任链可能会影响性能,特别是在链的末端才找到处理者时

  • 调试困难:请求的传递过程可能比较复杂,不容易调试

🚩责任链设计模式的Java实现

代码地址:GitHub

  • 创建 抽象主题 Handler接口
/*** @author hanson.huang* @version V1.0* @ClassName Handler* @Description 抽象类定义了处理请求的接口和设置下一个处理者的方法* @date 2025/3/25 15:45**/
public abstract class Handler {protected Handler next;public void setNext(Handler next) {this.next = next;}public abstract void HandlerRequest(int request);
}
  • 创建三个具体的处理者,实现自己的逻辑

    • FuDaoYuan处理者
    /*** @author hanson.huang* @version V1.0* @ClassName FuDaoYuan* @Description FuDaoYuan处理者* @date 2025/3/25 15:47**/
    public class FuDaoYuan extends Handler { // <= 7 审批@Overridepublic void HandlerRequest(int request) {if (request <= 7) {System.out.println("辅导员审批通过");} else {if (next != null) {next.HandlerRequest(request);} else {System.out.println("无法审批");}}}
    }
    
    • YuanZhang处理者
    /*** @author hanson.huang* @version V1.0* @ClassName YuanZhang* @Description YuanZhang处理者* @date 2025/3/25 15:51**/
    public class YuanZhang extends Handler {@Overridepublic void HandlerRequest(int request) {if (request <= 15) {System.out.println("院长审批通过");} else {if (next != null) {next.HandlerRequest(request);} else {System.out.println("无法审批");}}}
    }
    
    • XiaoZhang处理者
    /*** @author hanson.huang* @version V1.0* @ClassName XiaoZhang* @Description XiaoZhang处理者* @date 2025/3/25 15:52**/
    public class XiaoZhang extends Handler {@Overridepublic void HandlerRequest(int request) {if (request <= 30) {System.out.println("校长审批通过");} else {if (next != null) {next.HandlerRequest(request);} else {System.out.println("无法审批");}}}
    }
    
  • 测试责任链模式

/*** @author hanson.huang* @version V1.0* @ClassName ChainOfResponsibilityPattern* @Description 测试责任链模式* @date 2025/3/25 15:54**/
public class ChainOfResponsibilityPattern {public static void main(String[] args) {FuDaoYuan fuDaoYuan = new FuDaoYuan();YuanZhang yuanZhang = new YuanZhang();XiaoZhang xiaoZhang = new XiaoZhang();fuDaoYuan.setNext(yuanZhang);yuanZhang.setNext(xiaoZhang);fuDaoYuan.HandlerRequest(31);fuDaoYuan.HandlerRequest(25);}
}

📌 运行结果

传入31时,显示无法审批
传入25时,校长审批通过

在这里插入图片描述

🚩代码总结

  • Handler 抽象类定义了处理请求的接口和设置下一个处理者的方法

  • FuDaoYuanYuanZhangXiaoZhang 是具体的处理者,实现了自己的处理逻辑

  • ChainOfResponsibilityPattern 类构建了处理链并触发请求

  • 每个处理者如果不能处理当前请求,会将请求传递给链中的下一个处理者

🚩总结

  • 责任链设计模式 通过构建一条处理链来解耦请求发送者和接收者

  • 核心是 让多个对象都有机会处理请求,避免请求发送者与接收者之间的耦合

  • 适用于 多级审批、异常处理、事件传递 等场景

✅ Java源码中的应用场景:

  1. Java Servlet中的FilterChain

    • javax.servlet.FilterChain

    • 多个Filter组成责任链处理HTTP请求

  2. Java异常处理机制:

    • 异常在调用栈中向上传播的过程就是责任链模式的应用
  3. Spring Security的过滤器链:

    • 多个安全过滤器组成责任链处理安全相关逻辑
  4. Netty的ChannelPipeline:

    • 处理器链处理网络事件
  5. AWT/Swing事件处理:

    • 事件在组件层次结构中的传播
  6. Log4j/Logback日志框架:

    • 日志级别过滤和处理的链式结构

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

在这里插入图片描述

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

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

相关文章

【宇宙回响】从Canvas到MySQL:飞机大战的全栈交响曲【附演示视频与源码】

🌟 这是星际大战系列的第三篇,感谢一路以来支持和关注这个项目的每一位朋友! 💡 文章力求严谨,但难免有疏漏之处,欢迎各位朋友指出,让我们一起在交流中进步。 🎁 项目代码、文档和相关资源都可以免费获取,希望能帮助到更多对游戏开发感兴趣的朋友。 💌 如果您有任…

MyBatis-Plus(Ⅵ)插件

目录 一、分页插件 1.添加配置类 2.在测试类测试 结果 二、xml实现分页的自定义 1.UserMapper中定义接口方法 2.创建UserMapper.xml文件 3.在测试类测试 结果 三、乐观锁 1.场景 2.乐观锁与悲观锁 3.模拟修改冲突 数据库中添加商品表 添加数据 添加实体类 添加map…

火山引擎云上实战: DeepSeek R1 大模型(全尺寸)

本文将介绍两种在火山引擎云上部署 DeepSeek-R1 全尺寸模型服务的方案&#xff0c;涵盖大模型推理服务的 Terraform 一键部署、容器化部署、资源弹性伸缩和模型可观测。 来源 | 火山引擎云基础 在 AI 大模型日新月异的当下&#xff0c;企业在使用大模型时往往面临着数据隐私保…

工作流引擎Flowable介绍及SpringBoot整合使用实例

Flowable简介 Flowable 是一个轻量级的业务流程管理&#xff08;BPM&#xff09;和工作流引擎&#xff0c;基于 Activiti 项目发展而来&#xff0c;专注于提供高性能、可扩展的工作流解决方案。它主要用于企业级应用中的流程自动化、任务管理和审批流等场景。 Flowable 的核心…

【uni-app】引用公共组件

目录 一、建立公共组件 1.1新建vue文件 1.2编写公共文件代码 1.3使用 注意事项 一、建立公共组件 1.1新建vue文件 在公共组件文件目录下新建所需要的功能文件 1.2编写公共文件代码 按需求写对应功能的代码 1.3使用 在需要使用的文件下引用公共组件 注意事项 想要使用s…

STL中vector模拟实现

vector各个接口函数 //构造函数 vector() vector(size_t n,const T& valT()) vector(int n,const T& val T()) //拷贝构造函数 vector(const vector<T>& v) //迭代器版本的 vector(inputiterator first, inputiterator end) //赋值运算符重载 vector<T&…

DML 数据操纵语言学习笔记

一、DML 核心概念体系 1.1 语言定位与边界 DML&#xff08;Data Manipulation Language&#xff09;作为 SQL 三大核心语言之一&#xff0c;专注于数据行级操作&#xff0c;区别于 DDL&#xff08;结构定义&#xff09;和 DCL&#xff08;权限控制&#xff09;。其核心指令包…

啸叫抑制(AFS)从算法仿真到工程源码实现-第八节-系统搭建

一、概述 系统分为录音模块、数据处理模块、播音模块。录音模块和播音模块使用alsa库进行读写数据。各模块为独立进程处理&#xff0c;模块之间使用命名管道进行数据的传输。数据处理模块我们使用基于频域的自适应滤波去啸叫算法。 二、工程实现 2.1 系统流程图 2.2 录音模块…

HTML——什么是块级元素,什么是内联元素,有何区别

在 HTML 中&#xff0c;块级元素&#xff08;Block-level element&#xff09;和内联元素&#xff08;Inline element&#xff09;是两种不同类型元素&#xff0c;它们在页面布局和样式应用方面有不同的行为和特性。 块级元素&#xff08;Block-level element&#xff09; 块级…

01 设计模式和设计原则

类设计原则&#xff1a; 单一职责原则&#xff08;Single Responsibility Principle&#xff0c;SRP&#xff09;&#xff1a;实现类要职责单一开闭原则&#xff08;Open Close Principle&#xff0c;OCP&#xff09;&#xff1a;对扩展开放&#xff0c;对修改关闭里氏替换原则…

【踩坑日记】springboot 打包后实现类无法找到

试过了所有改什么目录 依赖 clean都以失败告终 最后将实现类的文件名从Impl改成impl宣布成功 记得使用idea自带的重构

项目-苍穹外卖(十五) WebSocket+语音播报功能实现(来订单+催单)

一、介绍 二、入门案例 配置类&#xff1a; package com.sky.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter;/…

Redis、Memcached应用场景对比

环境 Redis官方网站&#xff1a; Redis - The Real-time Data Platform Redis社区版本下载地址&#xff1a;Install Redis | Docs Memcached官方网站&#xff1a;memcached - a distributed memory object caching system Memcached下载地址&#xff1a;memcached - a dis…

kettle插件-mysql8数据库插件

场景&#xff1a;群里有小伙伴反馈kettle 7.x版本不能自动连接mysql8&#xff0c;安排&#xff01;&#xff01;&#xff01; 1、将mysql8的驱动包mysql-connector-java-8.0.20.jar丢到kettle的lib目录下&#xff0c;重启spoon。 2、配置数据库连接&#xff0c;提示驱动类不对…

【软件测试】:软件测试实战

1. ⾃动化实施步骤 1.1 编写web测试⽤例 1.2 ⾃动化测试脚本开发 common public class AutotestUtils {public static EdgeDriver driver;// 创建驱动对象public static EdgeDriver createDriver(){// 驱动对象已经创建好了 / 没有创建if( driver null){driver new EdgeDr…

深度学习入门1 基于Python的理论与实现

torch.unsqueeze()将一维数据变为二维数据&#xff0c;torch只能处理二维数据 tensor不能反向&#xff0c;variable可以反向。variable.data.numpy()转换为numpy 第3章 神经网络 实现softmax函数时的注意事项&#xff1a;为防止e的指数运算造成溢出 矩阵的第 0 维是列方向,第…

多版本PHP开发环境配置教程:WAMPServer下MySQL/Apache/MariaDB版本安装与切换

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、版本切换指南总结 前言 由于有几个项目分别使用到PHP7.0 和7.4以及8.0版本&#xff0c;设置mysql也会根据PHP版本使用不同的版本&#xff0c;于是开始研究…

2024年数维杯数学建模C题天然气水合物资源量评价解题全过程论文及程序

2024年数维杯数学建模 C题 天然气水合物资源量评价 原题再现&#xff1a; 天然气水合物&#xff08;Natural Gas Hydrate/Gas Hydrate&#xff09;即可燃冰&#xff0c;是天然气与水在高压低温条件下形成的类冰状结晶物质&#xff0c;因其外观像冰&#xff0c;遇火即燃&#…

Graphpad Prism for Mac医学绘图

Graphpad Prism for Mac医学绘图 文章目录 Graphpad Prism for Mac医学绘图一、介绍二、效果三、下载 一、介绍 GraphPad Prism for Mac是一款功能强大、易于使用的科学和统计分析软件&#xff0c;适用于各种类型的数据处理和可视化需求。无论您是进行基础研究、临床试验还是学…

Android实践开发制作小猴子摘桃小游戏

Android实践制作小猴子摘桃小游戏 实践素材项目源文件获取&#xff1a;Android可能存在版本差异项目如果不能正确运行&#xff0c;可以使用里面的素材自己构建项目Android实践制作小猴子摘桃小游戏Android实践制作小猴子摘桃小游戏https://mp.weixin.qq.com/s/jNU_hVfj9xklsil…