当前位置: 首页 > news >正文

电商网页设计网站什么是网络营销产生的现实基础

电商网页设计网站,什么是网络营销产生的现实基础,广告设计要学什么,在线整合营销推广责任链模式#xff08;Chain Of Responsibility Design Pattern#xff09;#xff0c;也叫做职责链#xff0c;是将请求的发送和接收解耦#xff0c;让多个接收对象都有机会处理这个请求。当有请求发生时#xff0c;可将请求沿着这条链传递#xff0c;直到有对象处理它… 责任链模式Chain Of Responsibility Design Pattern也叫做职责链是将请求的发送和接收解耦让多个接收对象都有机会处理这个请求。当有请求发生时可将请求沿着这条链传递直到有对象处理它为止。 一、责任链模式介绍 其实在日常生活中有不少使用责任链的场景。比如公司采购审批流程需要各个部门领导的批准同意。在责任链模式中客户端只需要将请求发送到责任链上无须关心请求的处理细节和传递请求会自动进行传递。 1.1 责任链模式的结构 责任链模式结构的核心在于引入了一个抽象处理类所以主要包含两个部分 一个抽象Handler类 因为责任链的存在需要定义下一个handler的引用才能形成一个链条有了下一个handler引用所以要对引用进行调用和管理于是需要setNext() 和getNext() 方法此外由于不同handler处理请求的方式不一致所以要在其中定义一个抽象的请求方法handleRequest() 一系列具体的Handler处理类 具体结构大致如下所示 abstract Handler抽象处理者定义一个处理请求的接口内部包含抽象处理方法和后继具体处理者Handler1、Handler2具体处理者具体实现抽象处理者的方法并对请求做一些逻辑处理Client客户端使用职责链模式 1.2 职责链模式的实现 根据上面的类图可以实现如下代码 /*** description: 抽象处理类* date: 2022/4/4*/ public abstract class Handler {private Handler successor;public Handler getSuccessor() {return successor;}public void setSuccessor(Handler successor) {this.successor successor;}/*** 处理请求的抽象方法* param request 请求*/public abstract void handleRequest(String request); } /*** description: 具体处理者1* date: 2022/4/4*/ public class Handler1 extends Handler{private String handler;public Handler1(String handler) {this.handler handler;}Overridepublic void handleRequest(String request) {if (handler1.equals(request)) {System.out.println(具体处理者handler1进行请求处理);} else {if (getSuccessor() ! null) {//如果指向下一个具体处理者getSuccessor().handleRequest(request);} else {System.out.println(没有处理者进行处理);}}} } /*** description: 具体处理者2* date: 2022/4/4*/ public class Handler2 extends Handler{private String handler;public Handler2(String handler) {this.handler handler;}Overridepublic void handleRequest(String request) {if (handler2.equals(request)) {System.out.println(具体处理者handler2进行请求处理);} else {if (getSuccessor() ! null) {getSuccessor().handleRequest(request);} else {System.out.println(请求没有被任何处理者处理);}}} } /*** description: 客户端类* date: 2022/4/4*/ public class Client {public static void main(String[] args) {Handler handler1 new Handler1(handler1);Handler handler2 new Handler2(handler2);handler1.setSuccessor(handler2);handler1.handleRequest(handler1);handler1.handleRequest(handler2);} }测试结果 具体处理者handler1进行请求处理 具体处理者handler2进行请求处理二、责任链模式的应用场景 责任链适用的应用场景有 当程序需要使用不同方式来处理不同种类的请求而且各个请求类型和顺 职责链模式最常见的应用就是用来开发各种框架的过滤器和拦截器比如Spring Interceptor和Servlet Filter 2.1 在Servlet Filter中的应用 Filter 可以实现对HTTP 请求的过滤功能比如鉴权、限流、记录日志、验证参数等等。比如一些Servlet 容器TomCat、Jetty等就支持Filter的过滤功能。以TomCat 为例 所以当Servlet 请求到来时首先会经过Filter 处理最后再到达Servlet实例。我这里选取的TomCat版本是SpringBoot自带的9.0先来看看FilterChain 的接口 public interface FilterChain {//Filter具体实现void doFilter(ServletRequest var1, ServletResponse var2) throws IOException, ServletException; }ApplicationFilterChain是责任链模式的具体实现类 public final class ApplicationFilterChain implements FilterChain {private ApplicationFilterConfig[] filters new ApplicationFilterConfig[0]; //Filter配置数组private int pos 0; //执行Filter的序号private int n 0; //目前Filter的个数private Servlet servlet null;public ApplicationFilterChain() {}Overridepublic void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {//Filter 具体实现//...}public static ServletRequest getLastServicedRequest() {return (ServletRequest)lastServicedRequest.get();}public static ServletResponse getLastServicedResponse() {return (ServletResponse)lastServicedResponse.get();}void addFilter(ApplicationFilterConfig filterConfig) {ApplicationFilterConfig[] newFilters this.filters;int var3 newFilters.length;for(int var4 0; var4 var3; var4) {ApplicationFilterConfig filter newFilters[var4];if (filter filterConfig) {return;}}//增加Filterif (this.n this.filters.length) {newFilters new ApplicationFilterConfig[this.n 10];System.arraycopy(this.filters, 0, newFilters, 0, this.n);this.filters newFilters;}this.filters[this.n] filterConfig;} }2.2 在Spring Interceptor中的应用 和Servlet Filter类似在Spring 中也有对应的过滤器 Interceptor。它是由Spring MVC 框架来实现借一张来自《设计模式之美》的图片来说明 客户端发送请求首先会经过Servlet Filter然后再经过Spring Interceptor最后再到达具体的业务中。 和Filter一样Interceptor 中也是基于责任链模式来实现的与之相对的HandlerInterceptor是抽象处理接口 public interface HandlerInterceptor {default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return true;}default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, Nullable ModelAndView modelAndView) throws Exception {}default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Nullable Exception ex) throws Exception {} }会有各种具体处理类的实现 此外在其他框架中也存在着职责链模式的使用比如Dubbo Filter、Netty ChannelPipeline等等 三、责任链模式实战 3.1 模拟三级审批责任链 简单利用职责链来设计三级审批 public static void main(String[] args) {//设计审批责任链Handler handler new FirstHandler().setNext(new SecondHandler().setNext(new ThirdHandler()));handler.doHandler(firstRequest);}//抽象处理类static abstract class Handler {private Handler next;public Handler getNext() {return next;}public Handler setNext(Handler next) {this.next next;return this;}public abstract void doHandler(String request);}//第一级审批人static class FirstHandler extends Handler {Overridepublic void doHandler(String request) {System.out.println(第一个审批处理点审批中...);if (request null || request ) {System.out.println(第一个审批节点的请求为空);;}System.out.println(第一个审批处理点审批完成);super.next.doHandler(secondRequest);}}//第二级审批人static class SecondHandler extends Handler {Overridepublic void doHandler(String request) {System.out.println(第二个审批处理点审批中...);if (request null || request ){System.out.println(第二个审批节点的请求为空);}System.out.println(第一个审批处理点审批完成);super.next.doHandler(thirdRequest);}}//第三级审批人static class ThirdHandler extends Handler {Overridepublic void doHandler(String request) {System.out.println(第三个审批处理点审批中...);Handler next super.next;if (next null){System.out.println(审批结束);}}}3.2 模拟在618大促期间的业务系统上线审批流程场景 像是这些⼀线电商类的互联⽹公司阿⾥、京东、拼多多等在618期间都会做⼀些运营活动场景以及 提供的扩容备战就像过年期间百度的红包⼀样。但是所有开发的这些系统都需要陆续的上线因为临 近618有时候也有⼀些紧急的调整的需要上线但为了保障线上系统的稳定性是尽可能的减少上线的 也会相应的增强审批⼒度。就像⼀级响应、⼆级响应⼀样。 ⽽这审批的过程在随着特定时间点会增加不同级别的负责⼈加⼊每个⼈就像责任链模式中的每⼀个核 ⼼点。对于研发并不需要关⼼具体的审批流程处理细节只需要知道这个上线更严格级别也更 ⾼但对于研发⼈员来说同样是点击相同的提审按钮等待审核。 使用责任链模式可以将各个服务模块按照一、二、三级进行分离每个级别可以像Filter一样用Successor下一个级别的方法进行调用。具体结构图如下来自《重学Java设计模式》 具体代码结构 │——AuthInfo.java │——AuthLink.java │ ├─business │ AuthService.java │ └─implLevel1AuthLink.javaLevel2AuthLink.javaLevel3AuthLink.java 实现代码 /*** description: 链路抽象审批* date: 2022/4/4*/ public abstract class AuthLink {/**时间格式化**/protected SimpleDateFormat f new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);/**级别人员ID**/protected String levelUserId;/**级别人员姓名**/protected String levelUserName;/**下一个链路**/private AuthLink next;public AuthLink(String levelUserId, String levelUserName) {this.levelUserId levelUserId;this.levelUserName levelUserName;}public AuthLink next() {return next;}public AuthLink appendNext(AuthLink next) {this.next next;return this;}/**每个具体处理者必须实现的方法**/public abstract AuthInfo doAuth(String uId, String orderId, Date authDate); } /*** description: 责任链中返回对象的定义* date: 2022/4/4*/ public class AuthInfo {private String code;private String info ;public AuthInfo(String code, String... infos) { //...表示可变长参数可以传入多个参数this.code code;for (String s : infos) {this.info this.info.concat(s);}}public String getCode() {return code;}public void setCode(String code) {this.code code;}public String getInfo() {return info;}public void setInfo(String info) {this.info info;} } /*** description: 一级审核人* date: 2022/4/4*/ public class Level1AuthLink extends AuthLink {public Level1AuthLink(String levelUserId, String levelUserName) {super(levelUserId, levelUserName);}Overridepublic AuthInfo doAuth(String uId, String orderId, Date authDate) {Date date AuthService.queryAuthInfo(levelUserId, orderId);if (null date) {return new AuthInfo(0001, 单号, orderId, 状态一级审批负责人, levelUserName);}AuthLink next super.next();if (null next) {return new AuthInfo(0000, 单号, orderId, 状态一级审批负责人, 时间, f.format(date), 审批人, levelUserName);}return next.doAuth(uId, orderId, authDate);} } /*** description: 测试类* date: 2022/4/5*/ public class ApiTest {private Logger logger LoggerFactory.getLogger(ApiTest.class);Testpublic void test_AuthLink() throws ParseException {//创建审批链条AuthLink authLink new Level3AuthLink(1000013, 王工).appendNext(new Level2AuthLink(1000012, 张经理).appendNext(new Level1AuthLink(1000011, 赵总裁)));logger.info(测试结果{}, JSON.toJSONString(authLink.doAuth(ethan, 100099800423123, new Date())));//将单号和用户id存入authMap中AuthService.auth(1000013, 100099800423123);logger.info(测试结果{}, 模拟二级审批王工);logger.info(测试结果{},JSON.toJSONString(authLink.doAuth(ethan, 100099800423123, new Date())));AuthService.auth(1000012, 100099800423123);logger.info(测试结果{}, 模拟二级负责人审批张经理);logger.info(测试结果{}, JSON.toJSONString(authLink.doAuth(ethan, 100099800423123, new Date())));AuthService.auth(1000011, 100099800423123);logger.info(测试结果{}, 模拟二级负责人审批赵总裁);logger.info(测试结果{}, JSON.toJSONString(authLink.doAuth(ethan, 100099800423123, new Date())));} }最后的测试结果 10:05:08.675 [main] INFO ApiTest - 测试结果{code:0001,info: 单号100099800423123 状态待三级审批 王工} 10:05:08.679 [main] INFO ApiTest - 测试结果模拟三级审批王工 10:05:08.680 [main] INFO ApiTest - 测试结果{code:0001,info: 单号100099800423123 状态待二级审批负责人张经理} 10:05:08.680 [main] INFO ApiTest - 测试结果模拟二级负责人审批张经理 10:05:08.680 [main] INFO ApiTest - 测试结果{code:0001,info: 单号100099800423123状态待一级审批负责人赵总裁} 10:05:08.680 [main] INFO ApiTest - 测试结果模拟一级负责人审批赵总裁 10:05:08.680 [main] INFO ApiTest - 测试结果{code:0000,info: 单号100099800423123状态一级审批完成负责人 时间2023-09-11 10:05:08审批人赵总裁}参考资料 《设计模式之美》 http://c.biancheng.net/view/4024.html 《重学Java设计模式》
http://www.zqtcl.cn/news/928265/

相关文章:

  • 网站开发需要注意的阿里云做网站可以免备案吗
  • 网站开发后端菜鸟教程本地安装wordpress nginx
  • 网站做端口映射域名怎么做网站
  • 港口建设征收 申报网站网站内容建设与管理
  • 长沙企业网站建设较好的公司个人社保缴费比例
  • 网站备案信息页面惠安网站建设报价
  • 东莞做微网站建设十大免费软件下载
  • 做的很好的黑白网站成都小程序开发
  • 发布做任务网站wordpress新建用户
  • 郑州市东区建设环保局官方网站工作简历模板免费下载
  • 虾皮跨境电商网站公司网站建设费计入什么费用
  • 东光有做网站的吗公司装修图片大全
  • 一个域名下多个网站项目网手游
  • 网站建设竞价托管服务wordpress搬站流程
  • 做视频网站视频文件都存放在哪室内设计网站平台
  • 外贸网站建设网合肥网站设计公
  • 网站建设设计制作 熊掌号一键生成小程序商城
  • 北滘做网站企业展厅 设计 公司 平安
  • 网站做seo外链常州营销型网站建设
  • 乐清门户网站建设网络推广关键词优化公司
  • 自己做的网站被攻击了企业展厅方案设计公司
  • 可信赖的郑州网站建设公司网站怎样实名认证
  • 创建一个网站的步骤是中国机械加工网招聘信息
  • 做电影解析网站烟台网站建设外贸
  • 做网站 网上接单汽车网站开发流程
  • 2017网站开发发展前景主页网站建设
  • 苏州手机网站建设费用上海企业制作网站
  • 网站上怎样做轮播图网站后台乱码怎么办
  • 专业网站建设品牌策划商务网站建设与维护考试
  • 网站开发手机版WordPress如何清空评论