专业网站优化外包怎么样做英文网站

web/2025/10/7 9:10:30/文章来源:
专业网站优化外包,怎么样做英文网站,app地图下载安装,wordpress weui主题#x1f448;️上一篇:命令模式 设计模式-专栏#x1f448;️ 文章目录 职责链模式定义英文原话直译如何理解呢#xff1f; 职责链模式的角色1. Handler#xff08;抽象处理者#xff09;2. ConcreteHandler#xff08;具体处理者#xff09;3. Client#xff08;客户… ️上一篇:命令模式 设计模式-专栏️ 文章目录 职责链模式定义英文原话直译如何理解呢 职责链模式的角色1. Handler抽象处理者2. ConcreteHandler具体处理者3. Client客户类类图类图分析代码示例 职责链模式的应用优点缺点使用场景 示例解析购物中心客户服务流程类图类图分析代码示例 职责链模式 职责链模式Chain of Responsibility Pattern是一种常见的行为模式。 职责链模式是一种将多个对象链接起来以处理相同请求的设计模式就像一条流水线或接力棒传递每个对象都有机会处理请求如果不能处理则传递给下一个对象直到找到能够处理的对象或传递完毕。 这种模式降低了对象间的耦合度增强了系统的可扩展性和灵活性使得请求的处理过程更加清晰和模块化。 简而言之职责链模式让请求在多个对象间“接力传递”直到找到“合适的人”来处理。 定义 英文原话 Chain of Responsibility Pattern: Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it. 直译 职责链模式通过将多个对象连接成一条链并沿着这条链传递请求以避免请求的发送者与接收者之间的紧密耦合。直到链上的某个对象处理请求为止。 如何理解呢 想象一下在图书馆借阅图书的流程。在一个大型的图书馆系统中处理图书借阅的流程可能涉及到多个步骤和角色每个角色都有自己特定的职责。 读者读者想要借阅一本书。他们首先会到自助借书机或前台服务台提出借阅请求。自助借书机这是第一个“处理者”。如果自助借书机正常工作且读者持有有效的借阅证它可以直接处理借阅请求打印出借阅凭条并更新图书的借阅状态。前台服务台如果自助借书机出现故障或读者遇到问题他们可以将借阅请求传递给前台服务台的工作人员。工作人员会检查读者的借阅证是否有效并手动处理借阅请求。图书管理员如果前台服务台的工作人员发现图书已经被其他读者预约或存在其他需要管理员处理的问题例如图书需要修复或更新库存他们会将借阅请求传递给图书管理员。图书管理员会进一步处理这些特殊情况并决定是否批准借阅请求。系统管理员在某些情况下例如系统出现严重故障或需要更改借阅规则时图书管理员可能无法直接处理请求。这时他们可以将请求传递给系统管理员由系统管理员来处理这些系统级别的问题。 在这个场景中每个角色自助借书机、前台服务台、图书管理员、系统管理员都是一个“处理者”他们共同组成了一个“职责链”。当一个借阅请求出现时它会沿着这个链传递直到有一个“处理者”能够处理它为止。 这种流程设计降低了各个角色之间的依赖和耦合使得借阅流程更加灵活和高效。同时它也提高了系统的可扩展性因为新的处理者可以很容易地添加到链中以处理新的请求或应对新的情况。 在软件系统中当有多个对象可以处理同一类请求时使用职责链模式可以避免请求发送者和接收者之间的紧密耦合使得系统更加灵活和可扩展。 职责链模式的角色 职责链模式中的角色通常包括以下几种 1. Handler抽象处理者 定义一个处理请求的接口 (可选) 实现后继链 定义一个处理请求的接口通常包含一个方法用于处理请求和一个属性用于保存对下一个处理者的引用。 2. ConcreteHandler具体处理者 处理它所负责的请求可访问它的后继者如果可处理该请求就处理否则将该请求转发给它的后继者 实现抽象处理者接口处理它所负责的请求如果可以处理该请求就处理否则将该请求传给它的后继者。 3. Client客户类 设置职责链 向链上的具体处理者ConcreteHandler对象提交请求 创建处理链并向链的第一个处理者对象发送请求。 类图 类图分析 抽象处理者组合了自身类型的对象定义了 successor 后继处理器属性并通过setSuccssor()方法进行赋值体现在子类上就是每个具体的处理者可以设置后继处理器即当前无法处理的话递给后继处理器进行处理。 代码示例 下面是一个简单的Java示例演示了职责链模式的应用 抽象处理者 abstract class Handler {protected Handler successor; // 持有后继者的引用 // 设置后继者 public void setSuccessor(Handler successor) {this.successor successor;}// 处理请求的方法声明为抽象方法由具体处理者实现 public abstract void handleRequest(int request); }具体处理者A class ConcreteHandlerA extends Handler {Overridepublic void handleRequest(int request) {if (request 0 request 10) {System.out.println(Handler A handled request request);} else if (successor ! null) {successor.handleRequest(request); // 如果不能处理则传递给后继者 }} }具体处理者B class ConcreteHandlerB extends Handler {Overridepublic void handleRequest(int request) {if (request 10 request 20) {System.out.println(Handler B handled request request);} else if (successor ! null) {successor.handleRequest(request); // 如果不能处理则传递给后继者 }} }具体处理者C class ConcreteHandlerC extends Handler {Overridepublic void handleRequest(int request) {if (request 20) {System.out.println(Handler C handled request request);} else {// 这里没有后继者请求到此为止 System.out.println(No handler could process the request request);}} } 客户类 package com.polaris.designpattern.list3.behavioral.pattern03.chainofresponsibility.classicdemo;public class Client {public static void main(String[] args) {Handler handlerA new ConcreteHandlerA();Handler handlerB new ConcreteHandlerB();Handler handlerC new ConcreteHandlerC();// 设置职责链 handlerA.setSuccessor(handlerB);handlerB.setSuccessor(handlerC);// 发送请求 int[] requests {2, 15, 30};for (int request : requests) {handlerA.handleRequest(request);}} } /* Output: Handler A handled request 2 Handler B handled request 15 Handler C handled request 30 *///~在上面的示例中我们定义了三个具体处理者A、B、C它们分别处理不同范围的请求。在客户类中我们创建了一个处理链并将请求发送到链的第一个处理者A。如果A不能处理请求它会将请求传递给B依此类推。 最终所有的请求都会被处理或者因为找不到合适的处理者而结束。 职责链模式的应用 优点 降低耦合度请求者和接收者之间不直接联系降低了系统的耦合度。增强系统的可扩展性可以根据需要增加新的请求处理类满足开闭原则。增强给对象指派职责的灵活性当工作流程发生变化可以动态地改变链内的成员或者调动它们的次序也可动态地新增或者删除责任。责任链简化了对象之间的连接每个对象只需保持一个指向其后继者的引用不需保持其他所有处理者的引用这避免了使用众多的 if 或者 if···else 语句。 缺点 不能保证每个请求一定被处理由于一个请求没有明确的接收者所以不能保证它一定会被处理该请求可能一直传到链的末端都得不到处理一个请求也可能因为链的结构没有得到正确构建而得不到处理比如忘记给处理者设置后继者。对比较长的职责链请求的处理可能涉及多个处理对象系统性能将受到一定影响。职责链建立的合理性要靠客户端来保证增加了客户端的复杂性可能会由于职责链的错误设置而导致系统出错如可能会造成循环调用。 使用场景 有多个对象可以处理同一个请求具体哪个对象处理该请求由运行时刻自动确定。在不明确指定接收者的情况下向多个对象中的一个提交一个请求。可动态指定一组对象处理请求客户端可以动态地设置职责链来处理请求也可以改变链内的成员或者调动它们的次序。 示例解析购物中心客户服务流程 为了更直观地解释职责链模式我们可以使用一个简单的例子购物中心的客户服务流程。当顾客在购物中心遇到问题如退换货、咨询商品信息等时他们可能会首先找到最近的店员寻求帮助。如果店员不能解决问题他们可能会将问题转交给部门经理如果部门经理也不能处理问题最终可能会提交给客服中心。 生活中的例子 顾客在购物中心遇到问题的顾客。店员首先接待顾客的人可以处理一些简单的请求如商品信息查询。部门经理如果店员不能解决问题顾客的问题会转交给部门经理部门经理能处理更复杂的请求如退换货。客服中心如果部门经理也无法解决问题问题最终会提交给客服中心。 类图 类图分析 抽象出抽象处理者 CustomerServiceRequestHandler 客户服务请求处理器 店员 Clerk , 部门经理 DepartmentManager , 客服中心 CustomerServiceCenter分别对其进行实现是请求的具体处理者 从类图也可发现店员Clerk 对象组合了一个请求处理器对象即后继处理节点在这个示例是部门经理DepartmentManager 对象表示店员如果可以处理的客户问题店员就进行处理否则交给他的后继节点部门经理处理 如果请求被流转到部门经理DepartmentManager 对象来处理如果他能处理则自行处理返回了否则将客户的问题递给后继节点处理这里是客服中心CustomerServiceCenter对象从类图可以看出部门经理对象组合了一个客户服务请求处理器具体是客服中心对象。 在本示例中任何店员部门经理处理不了的问题客服中心都负责处理他是最后的问题处理节点因此它不再组合后继节点。 代码示例 首先我们定义一个处理请求的接口 public interface CustomerServiceRequestHandler {String handleRequest(String request);void setNextHandler(CustomerServiceRequestHandler nextHandler); }然后我们创建实现该接口的类来表示不同的处理者 1.店员 Clerk public class Clerk implements CustomerServiceRequestHandler {private CustomerServiceRequestHandler nextHandler;Overridepublic String handleRequest(String request) {if (canHandleRequest(request)) {return Clerk handled request: request;} else if (nextHandler ! null) {return nextHandler.handleRequest(request);} else {return No handler could process the request: request;}}Overridepublic void setNextHandler(CustomerServiceRequestHandler nextHandler) {this.nextHandler nextHandler;}private boolean canHandleRequest(String request) {// 假设店员只能处理商品信息查询请求return request.startsWith(Product Info);} } 2.部门经理 DepartmentManager public class DepartmentManager implements CustomerServiceRequestHandler {private CustomerServiceRequestHandler nextHandler;Overridepublic String handleRequest(String request) {if (canHandleRequest(request)) {return Department Manager handled request: request;} else if (nextHandler ! null) {return nextHandler.handleRequest(request);} else {return No handler could process the request: request;}}Overridepublic void setNextHandler(CustomerServiceRequestHandler nextHandler) {this.nextHandler nextHandler;}private boolean canHandleRequest(String request) {// 假设部门经理可以处理退货请求return request.startsWith(Return an item);} }3.客服中心 CustomerServiceCenter public class CustomerServiceCenter implements CustomerServiceRequestHandler {Overridepublic String handleRequest(String request) {return Customer Service Center handled request: request;}Overridepublic void setNextHandler(CustomerServiceRequestHandler nextHandler) {// 客服中心是链的末尾不需要设置下一个处理者// 这里可以抛出一个异常或者忽略这个调用} }最后我们可以创建一个客户端类来演示如何使用这个职责链 public class CustomerServiceChainDemo {public static void main(String[] args) {// 创建处理者实例CustomerServiceRequestHandler clerk new Clerk();CustomerServiceRequestHandler manager new DepartmentManager();CustomerServiceRequestHandler center new CustomerServiceCenter();// 构建职责链clerk.setNextHandler(manager);manager.setNextHandler(center);// 模拟顾客提交请求//查询商品信息String request1 Product Info 123;String result1 clerk.handleRequest(request1);System.out.println(result1); // 输出Clerk handled request: Product Info 123//退货String request2 Return an item;String result2 clerk.handleRequest(request2);System.out.println(result2); // 输出Department Manager handled request: Return an item//服务投诉String request3 Complaint about service;String result3 clerk.handleRequest(request3);System.out.println(result3); // 输出Customer Service Center handled request: Complaint about service} } /* Output: Clerk handled request: Product Info 123 Department Manager handled request: Return an item Customer Service Center handled request: Complaint about service *///~在这个例子中我们模拟了三种不同类型的顾客请求并展示了它们如何通过职责链被不同的处理者处理。如果一个处理者不能处理请求它会将请求传递给链中的下一个处理者直到找到能够处理该请求的处理者或者到达链的末尾。 ️上一篇:命令模式 设计模式-专栏️

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

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

相关文章

东莞市住房和城乡建设厅网站首页石家庄情况最新消息今天

能看到这篇文章说明网上哪些获取 (dbm/asu值)不适合你,不是他们的代码不正确,而是不符合你的情况 比如安卓6获取android手机信号强度 可以看这篇文章 https://blog.csdn.net/sinat_31057219/article/details/81134030 当然如果你…

网站建设都是需要什么软件基于微信公众号开发网站开发

vscode保存代码,自动按照eslint规范格式化代码设置编辑器代码风格一致,是前端代码规范的一部分。我们现在前端绝大部分都在使用eslint,或者将要把代码改为eslint,那么此时我们怎么方便使用这个规范呢,下面我来介绍一下…

网站开发项目swot分析四川网站设计成功柚米科技

年度最佳动力艇大奖由英国杂志《Motor Boat & Yachting》(MBY)主办,经(MBY)深思熟虑,评委们缩小了2021年度最佳动力艇大奖的决赛入围名单。由于旅行限制,今年的形式会有所不同,不能像往年一样测试那么多的船。因此&#xff0c…

枣庄公司做网站南通网站排名团队

Cortex-M3是一个32位处理器内核。内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的。CM3采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,…

做阿里巴巴网站找谁汉中建设工程招投标信息网官网

什么是时间回拨问题 雪花算法通过时间来即将作为id的区分标准之一,对于同一台id生成机器,它通过时间和序号保证id不重复当机器出现问题,时间可能回到之前,此时,时间就不能区分又或者因为闰秒的出现,导致时间回拨 如何解决 方法1 直接抛出异常 不管3X721,直接抛出异常将问题…

装修公司网站多少钱成都有哪些比较做网站比较好的

为什么80%的码农都做不了架构师?>>> 五种必会软件: SubSonic CodeSmith Professional 4.1 HttpWatch Professional IE Developer Toolbar Fiddler 是一个web调试代理。它能够记录所有客户端和服务器间的http请求,允许你监视&…

岳阳网站优化一分钟企业宣传片怎么拍

目录 前言 websocket封装 wangeditor下载 共同编辑文档代码实现 HTML样式部分 JS部分 css部分 前言 功能:实现文档共同编辑功能,可以实时接收到其他人的信息 思路:先调用接口获取相应的数据进行渲染,然后通过webSocket建…

图书馆网站建设的建议惠州百度网络推广

Android静态ip设置的坑 Android静态ip设置,对于这个功能,如果没有接触过,会给人感觉是个特别简单的功能,直接调用系统的接口即可,其实这个功能还是有许多坑的,因为谷歌在Android SDK中对相关的API进行非系…

旅游网站网页设计vps 安装 wordpress

md5(string,raw) 所以首先我们要找到一个字符串,这个字符串经过md5得到的16位原始二进制的字符串能帮我们实现sql注入。 我们的目标就是要找一个字符串取32位16进制的md5值里带有276f7227这个字段的,接着就是要看关键的数字部分了,在276f72…

学习网站建设培训公共资源交易中心职能

Vue是一个非常流行的渐进式JavaScript框架,渐进式指的是自底向上,从小组件逐渐向上构成整个项目,渐进式还可以理解为:用什么就拿什么,每个组件只做自己的事,尽可能解耦合。 本节我们将学习简单的Vue实例&a…

企业网站如何更新备案信息用dw可以做网站吗

通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控。 参加AppDynamics APM导览! 在软件开发中,很少有问题比选择编程语言更具分裂性或部落性。 软件开发人员经常以自己选择的工具来强烈地认同自己,将客观…

纯图片网站源码wish网站应该怎么做

1. 问题描述 给出2n1个非负整数元素的数组,除其中一个数字之外,其他每个数字均出现两次,找到这个数字。 2. 问题示例 给出[1,2,2,1,3,4,3],返回4。 3. 代…

湖南省网站备案时间网络优化这个行业怎么样

考研数学的难度是相对的,它取决于考生的数学基础、备考时间、复习效率和解题技巧等多个因素。从历年的考试情况来看,考研数学确实具有一定的挑战性,主要体现在以下几个方面。 首先是知识覆盖面广,考研数学涵盖了高等数学、线性代…

wordpress.org建站wordpress 收不到邮件

在网络建设及应用中,由于网线最大的传输距离一般为100米,因此布建远距离传输网络的时候不得不使用光纤收发器等中继设备。光纤收发器一般应用在以太网电缆无法覆盖、必须使用光纤来延长传输距离的实际网络环境中。那么,光纤收发器该如何使用呢…

深圳网站制作的公司深圳app开发自学编程从哪学起

Java程序员习惯性地用“ getters”和“ setters”来修饰类,这种做法根深蒂固,以至于几乎没有人质疑为什么这样做或是否应该这样做。 最近,我认为最好不要这样做,并且我开始在编写的Java代码中避免使用它。 在这篇博客文章中&#…

h5微信网站开发wordpress js cdn

来源:资本实验室回顾2018年,基于数字化的新技术继续推动着各行的的变革。人工智能、基因技术、物联网、3D打印、区块链……这些技术的应用在改变传统行业游戏规则的同时,给我们提供了关于未来技术应用的想象空间。当然,在看到美好…

网站与云平台区别哪里做网络推广

PHP判断数据库中的记录是否存在的方法,php数据库本文实例讲述了PHP判断数据库中的记录是否存在的方法。分享给大家供大家参考。具体实现代码如下:复制代码 代码如下:$sql"select * from checklist where game_id$gid and task$task and status$stat…

专题网站建设解决方案网络推广主要内容

文章目录 问题描述具体做法代码示例更多条件限制升级 数据库迁移和备份简介数据库迁移数据库备份 问题描述 使用fluttter开发的应用程序发布后,发现数据库有些设计不合理。如何来更新数据库呢? 使用sqflite来处理数据库,但是第一版软件发布后…

在大学里网站建设属于什么专业网站项目建设流程图

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

深圳返利网站开发新余百度网站建设

对于new出来的array sizeof()得到的只是指针大小 对于直接赋值的array sizeof()得到的就是整个数组的大小 memcpy的时候特别注意