微信推送在哪个网站做静安区建设工程招标投标管理部门网站

web/2025/10/7 20:44:38/文章来源:
微信推送在哪个网站做,静安区建设工程招标投标管理部门网站,建设娱乐城网站,番禺推广优化定义 责任链模式是一种行为型设计模式#xff0c;用于在对象间建立一条处理请求的链。它允许多个对象有机会处理请求#xff0c;从而减少请求的发送者和接收者之间的耦合。在责任链模式中#xff0c;每个接收者包含对另一个接收者的引用#xff0c;形成一条链。如果一个对…定义 责任链模式是一种行为型设计模式用于在对象间建立一条处理请求的链。它允许多个对象有机会处理请求从而减少请求的发送者和接收者之间的耦合。在责任链模式中每个接收者包含对另一个接收者的引用形成一条链。如果一个对象不能处理请求它会将请求传递给链中的下一个对象直至链的末端。 责任链模式由多个处理器或接收者组成每个处理器决定自己是否处理请求或将其传递给链上的下一个处理器。这种模式实现了发送者和接收者之间的解耦同时允许动态地调整链中的处理器。 责任链模式主要包含以下两个角色 处理器Handler 定义了处理请求的接口或抽象类并通常持有对下一个处理器的引用。在其子类中它可以选择处理请求或将请求传递给链上的下一个对象。 具体处理器Concrete Handler 实现处理器接口的具体类。每个具体处理器决定它是否要处理请求如果不处理则将请求传递给链中的下一个对象。 解决的问题 请求的发送者和接收者解耦 在没有责任链模式的情况下请求的发送者需要知道哪个接收者能够处理该请求并直接调用相应的处理方法。责任链模式使得请求的发送者不需要直接与具体的接收者交互从而解耦了发送者和接收者。 动态处理请求 责任链模式允许动态地重新组织和分配责任链上的处理者。这意味着可以在运行时改变请求的处理顺序或者增加新的处理者。 简化对象间的连接 通过责任链可以减少对象间复杂的条件语句。在责任链模式中请求沿着链传递直到被处理。这避免了显式的多重条件判断。 增加处理者的灵活性 责任链模式让每个处理者都有机会处理请求。处理者可以决定是否处理请求或者将请求传递给链上的下一个对象。 分布式责任 责任链模式允许多个对象处理请求而不是只有一个对象负责所有的情况。这种分布式责任有助于代码的复用和扩展。 使用场景 多个对象可以处理同一个请求但具体的处理者在运行时才确定 当一个请求可能由多个不同的对象处理但是具体由哪个对象处理在运行时才决定时责任链模式是理想的解决方案。 请求的发送者不需要知道是谁处理了请求 如果请求的发送者不需要知道请求最终由哪个对象处理责任链模式可以将请求的发送和处理解耦。 动态指定一组对象处理请求 当需要动态地指定一系列对象来处理请求时责任链模式提供了一种灵活的方法来组织这些对象。 实现不同方式的请求处理 在有多种处理方式并且希望根据请求的类型或条件以不同的方式处理时责任链模式能够提供足够的灵活性。 示例代码1-日志处理器 // 抽象处理器类 public abstract class Logger {public static int INFO 1;public static int DEBUG 2;public static int ERROR 3;protected int level;protected Logger nextLogger;public void setNextLogger(Logger nextLogger) {this.nextLogger nextLogger;}public void logMessage(int level, String message) {if (this.level level) {write(message);}if (nextLogger ! null) {nextLogger.logMessage(level, message);}}abstract protected void write(String message); }// 具体处理器实现 class ConsoleLogger extends Logger {public ConsoleLogger(int level) {this.level level;}Overrideprotected void write(String message) { System.out.println(Standard Console::Logger: message);} }// 客户端使用责任链 public class ChainPatternDemo {private static Logger getChainOfLoggers() {Logger errorLogger new ErrorLogger(Logger.ERROR);Logger fileLogger new FileLogger(Logger.DEBUG);Logger consoleLogger new ConsoleLogger(Logger.INFO);errorLogger.setNextLogger(fileLogger);fileLogger.setNextLogger(consoleLogger);return errorLogger;}public static void main(String[] args) {Logger loggerChain getChainOfLoggers();loggerChain.logMessage(Logger.INFO, This is an information.);loggerChain.logMessage(Logger.DEBUG, This is a debug level information.);loggerChain.logMessage(Logger.ERROR, This is an error information.);} }示例代码2-审批流程 // 抽象处理器 abstract class Approver {protected Approver successor;public void setSuccessor(Approver successor) {this.successor successor;}public abstract void processRequest(PurchaseRequest request); }// 具体处理器经理 class Manager extends Approver {public void processRequest(PurchaseRequest request) {if (request.getAmount() 1000) {System.out.println(Manager will approve the request of request.getAmount());} else if (successor ! null) {successor.processRequest(request);}} }// 具体处理器总监 class Director extends Approver {public void processRequest(PurchaseRequest request) {if (request.getAmount() 5000) {System.out.println(Director will approve the request of request.getAmount());} else if (successor ! null) {successor.processRequest(request);}} }// 具体处理器CEO class CEO extends Approver {public void processRequest(PurchaseRequest request) {if (request.getAmount() 10000) {System.out.println(CEO will approve the request of request.getAmount());} else {System.out.println(Request of request.getAmount() needs a board meeting!);}} }// 请求类 class PurchaseRequest {private double amount;public PurchaseRequest(double amount) {this.amount amount;}public double getAmount() {return amount;} }// 客户端代码 public class ChainOfResponsibilityDemo {public static void main(String[] args) {Approver manager new Manager();Approver director new Director();Approver ceo new CEO();manager.setSuccessor(director);director.setSuccessor(ceo);manager.processRequest(new PurchaseRequest(500));manager.processRequest(new PurchaseRequest(1500));manager.processRequest(new PurchaseRequest(5500));} }主要符合的设计原则 开闭原则Open-Closed Principle 责任链模式允许在不修改现有代码的情况下添加新的处理器。你可以添加新的处理类来扩展系统的功能而无需修改现有的处理链或客户端代码。因此系统对扩展是开放的但对修改是封闭的。 单一职责原则Single Responsibility Principle 在责任链模式中每个处理器只负责处理特定类型的请求。这符合单一职责原则因为每个处理器类只有一个理由发生变化——处理其特定的请求。 里氏替换原则Liskov Substitution Principle 责任链中的处理器通常遵循相同的接口。这意味着处理器的任何子类都可以替换其父类而不影响系统的行为。 在JDK中的应用 java.util.logging.Logger 在 java.util.logging 包中Logger 类使用责任链模式。日志消息可以在一个日志处理链中传递每个处理器如 ConsoleHandler, FileHandler决定是否处理日志消息并将消息传递到链中的下一个处理器。 Java Servlet Filters 在Java Servlet API中过滤器Filter使用责任链模式。请求和响应在多个过滤器之间传递每个过滤器可以独立地处理请求或响应或将其传递给链中的下一个过滤器。 javax.servlet.FilterChain FilterChain 是Servlet API的一部分它允许多个过滤器按顺序处理HTTP请求和响应。每个过滤器在链中都有机会处理请求和响应或将其传递给链上的下一个过滤器。 在Spring中的应用 Spring Security的过滤器链 在Spring Security中安全过滤器链是责任链模式的一个显著例子。请求通过一系列的安全过滤器每个过滤器执行特定的安全检查如认证、授权等。这些过滤器可以自定义和配置形成一个处理安全的责任链。 Spring Web的拦截器 在Spring MVC中拦截器Interceptor提供了一种在处理HTTP请求时插入自定义逻辑的机制。拦截器可以形成一个拦截器链每个拦截器按顺序执行处理请求或响应或将控制权传递给链中的下一个拦截器。 Spring AOP的通知链 在Spring的面向切面编程AOP中通知Advice可以被看作是责任链的一部分。不同的通知如前置通知、后置通知、环绕通知等可以按顺序应用于方法调用形成一个通知链。

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

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

相关文章

wap手机网站程序游戏交易网站怎么做

1、epubjs核心工作原理 1.1 epubjs的核心工作原理解析 epub电子书,会通过epubjs去实例化一个Book对象,Book对象会对电子书进行解析。Book对象可以通过renderTo方法去生成一个Rendition对象,Rendition主要负责电子书的渲染,通过R…

cdr做图时怎么找到网站的网站内容的设计

本文主要记录如何编译出windows版本的openss的lib库 1.下载openssl,获得openssl-master.zip。 a.可以通过github(网址在下方)上下载最新的代码、今天是2023.12.1我用的master版本,下载之后恭喜大侠获得《openssl-master.zip》 …

北京网站搭建服务seo软件定制

目录 前言 开篇语 准备工作 npm 概念 常见指令 项目中的包 创建项目 启动项目 服务器搭建 express 基本步骤 搭建应用 创建路由 监听端口 启动服务器 面试相关 结束语 前言 开篇语 本系列博客分享Node.js的相关知识点,本章讲解npm与服务器的简单…

国外网站风格七台河新闻联播视频

1、Port Security解析触发Port Security的条件:未授权的MAC地址端口MAC地址数量超过了限制触发Port Security后的动作:protect Security violation protect mode 丢弃数据,不发送SNMP Trap消息 restrict Security violation restr…

网站开发标书网站根目录验证文件是什么

在有些情况下,我们需要程序逻辑自动触发元素的事件,例如js提供了click(), form提供了reset(),submit()等方法!在jquery中提供了trigger()方法帮助我们自动触发事件,原理是什么呢?接下来让我们一探究竟&…

网站建设排版页面所有网站302跳转百度

日志记录在整个java工程开发中占着很重要的比重,因为很多问题的排查需要通过日志分析才能确认。在SpringBoot中我用得最多的就是log4j这个日志框架。接下来我们具体配置log4j. log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别&#…

手机ftp传网站文件做家政网上推广网站

http://nicethemes.cn/news/txtlist_i28391v.html 这次来分享一下ES报错:java.io.IOException: Connection reset by peer 的解决经历 问题描述 本人最近负责了定时获取Prometheus Metrics并发送到ES做持久化存储的任务。然而在Metrics采集粒度从3分钟变为1小时后…

网站公司一站式服务企业网站建设训

1. 超链接导航失效: 小程序规则——wx.navigateTo 和 wx.redirectTo 不允许跳转到 tabbar 页面,只能用 wx.switchTab 跳转到 tabbar 页面转载于:https://www.cnblogs.com/xyyt/p/9252835.html

flask做大型网站开发高级私人定制制衣店

最近,摆摊经济开始火了起来,于是各路诸侯纷纷举起大旗开始摆摊。我周围也不乏有亲朋好友蠢蠢欲动,有的甚至已经初有规模。但这波摆摊风是否真的可行,对谁可行,有哪些风口,有哪些坑,我们慢慢分析…

网站不备案访问资讯网站如何做聚合

一、简介 1、NAS_CAB介绍 跨平台NAS软件,远程管理照片,影音和文件,无需专用设备,个人版永久免费。官网地址:https://www.nascab.cn/。 2、NatCross介绍 NatCross是内网穿透工具,也是免费的端口映射和DDNS动态域名解析软件。软件从2021年上线以来&…

创新的网站建设公司排名关键词网站排名顾问

简易电压采集装置(限MSP430、STM32单片机) 任务要求: 设计制作一个简易电压采集与显示装置,实现如下基本功能: 评分细则: 1.通过单片机内部ADC模块采集1路电压并通过OLED屏显示电压大小;&#x…

门户网站建设为企业带来的好处网站托管价格

Lua协程Coroutine是什么协程和线程不同: 同一时刻,一个多线程程序可以用多个线程同时执行;而协程只能有一个在执行多线程是抢占式的;而协程是非抢占式的,只有协程显示被挂起,才会被挂起 协程和线程的相同…

茌平网站建设道气钻上海区域划分

我叫白天涯,来自计科13-1班。 首次使用这个博客园发表随笔,请大家多多关照。 本次软件工程课我希望能好好听讲,认真做课堂记录,不会的及时问老师,以及跟同学沟通,尽管我计算机这方面不是太精通,…

个人网站可以做淘宝推广公司网站建设宣传公司

题目: 暗黑游戏中,装备直接决定玩家人物的能力。可以使用Pg和Rune购买需要的物品。暗黑市场中的装备,每件有不同的价格(Pg和Rune)、能力值、最大可购买件数。Kid作为暗黑战网的一个玩家,当然希望使用尽可能…

建一个商业网站要多少钱网站开发公司长春

今天给大家搞一个弹性盒布局的实例,最近一直在复习一些基础的东西,所以一直会跟大家分享一些基础的东西 说实话,最近感觉被掏空了,别问我为什么,谁去保健谁知道,哈哈,注意安全,好了步…

做网站页面怎么做a站播放量最高的视频

王有志,一个分享硬核 Java 技术的互金摸鱼侠 加入 Java 人的提桶跑路群:共同富裕的Java人 今天是《面霸的自我修养》第 6 篇文章,我们一起来看看面试中会问到哪些关于线程池的问题吧。数据来源: 大部分来自于各机构(J…

单页网站赚钱做app推广上哪些网站

js定时器功能 定时器返回值:是一个正整数,表示由 setTimeout() 调用创建的定时器的编号。这个值可以传递给 clearTimeout() 来取消该定时器。 var st;var sp; function start(){stsetTimeout("test()",3000); //3s后执行test,返…

合肥企业网站建设专家wordpress检索

题目:有n2^k个运动员要进行循环赛。现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次 (2)每个选手一天只能赛一次 (3)循环赛一共进行n-1天 解题思路&…

温州建设监理协会网站拼多多怎么查商品排名

最新数据显示,全国各城市外商直接投资额实际使用额在过去一年中呈现了稳步增长的趋势。这一数据为研究者提供了对中国外商投资活动的全面了解,并对未来投资趋势和政策制定提供了重要参考。 首先,这一数据反映了中国各城市作为外商投资的热门目…

网站建设公司ipo长沙谷歌优化

在 Java 中,泛型通配符(?)用于表示未知类型,通常用于增强泛型的灵活性。通配符可以与上下限结合使用,以限制泛型的范围。以下是通配符及上下限的使用示例: 1. 无界通配符 (?) 无界通配符表示可以接受任意…