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

今日头条橙子建站官网seo快速排名优化方法

今日头条橙子建站官网,seo快速排名优化方法,优秀个人网站设计模板,室内设计师工资前言 前面荔枝梳理了有关单例模式、策略模式的相关知识,这篇文章荔枝将沿用之前的写法根据示例demo来体会这种责任链设计模式,希望对有需要的小伙伴有帮助吧哈哈哈哈哈哈~~~ 文章目录 前言 责任链模式 1 简单场景 2 责任链模式理解 3 Java下servl…

前言

        前面荔枝梳理了有关单例模式、策略模式的相关知识,这篇文章荔枝将沿用之前的写法根据示例demo来体会这种责任链设计模式,希望对有需要的小伙伴有帮助吧哈哈哈哈哈哈~~~


文章目录

前言

责任链模式 

1 简单场景 

2 责任链模式理解 

 3 Java下servlet包中的doFilter

总结


责任链模式 

        责任链模式是将一系列处理单元通过指针连接起来,按顺序执行下去,完成对请求的处理,当责任链模式中一个处理单元不适合处理该请求时,将继续传递该请求到下一单元,其往往使用一个共享的上下文对象来包装请求,该上下文对象同样包含责任链的输出模型。责任链顺序执行的过程,是上下文输出模型逐渐完善的过程。

1 简单场景 

为了更好地理解,我们首先需要设计场景来理解:现在需要开发一个过滤机制来Msg对象中的非法输入,下面的代码是未使用责任链的模式。 

package com.crj.test;import java.util.ArrayList;
import java.util.List;public class SimpleMain {public static void main(String[] args) {Msg msg = new Msg();msg.setMsg("伪装一下注入:<script>关键词。。999......");List<Filter> filters = new ArrayList<>();filters.add(new HTMLFilter());filters.add(new SensitiveFilter());for(Filter f:filters){f.doFilter(msg);}System.out.println(msg);}
}class Msg{String name;String msg;public void setMsg(String msg) {this.msg = msg;}public String getMsg() {return msg;}@Overridepublic String toString() {return "Msg{" +"name='" + name + '\'' +", msg='" + msg + '\'' +'}';}}interface Filter{void doFilter(Msg m);
}/*** HTML过滤*/
class HTMLFilter implements Filter{@Overridepublic void doFilter(Msg m) {String r = m.getMsg();r = r.replace('<','[');r = r.replace('>',']');m.setMsg(r);}
}
/*** 敏感词过滤*/
class  SensitiveFilter implements Filter{@Overridepublic void doFilter(Msg m) {String r = m.getMsg();r = r.replace("999","666");m.setMsg(r);}
}

2 责任链模式理解 

        使用责任链模式来编写demo,可以看到我们添加了一个类FilterChain,通过该类中封装的add()方法来将不同的过滤规则进行添加,同时调用不同的规则对象各自声明的重写的doFilter方法实现过滤。这个过程就像是一串糖葫芦,一颗一颗需要用一根竹签串起来,这个竹签就是FilterChain类,糖葫芦就是不同的过滤规则类。

package com.crj.test;import java.util.ArrayList;
import java.util.List;public class SimpleMain {public static void main(String[] args) {Msg msg = new Msg();msg.setMsg("伪装一下注入:<script>关键词。。999......");FilterChain fc = new FilterChain();fc.add(new HTMLFilter());fc.add(new SensitiveFilter());fc.doFilter(msg);System.out.println(msg);}
}class Msg{String name;String msg;public void setMsg(String msg) {this.msg = msg;}public String getMsg() {return msg;}@Overridepublic String toString() {return "Msg{" +"name='" + name + '\'' +", msg='" + msg + '\'' +'}';}}interface Filter{void doFilter(Msg m);
}/*** HTML过滤*/
class HTMLFilter implements Filter{@Overridepublic void doFilter(Msg m) {String r = m.getMsg();r = r.replace('<','[');r = r.replace('>',']');m.setMsg(r);}
}
/*** 敏感词过滤*/
class  SensitiveFilter implements Filter{@Overridepublic void doFilter(Msg m) {String r = m.getMsg();r = r.replace("999","666");m.setMsg(r);}
}
/*** 过滤链*/
class FilterChain{List<Filter> filters = new ArrayList<>();public void add(Filter filter){filters.add(filter);}public void doFilter(Msg m){for(Filter f:filters){f.doFilter(m);}}
}

 3 Java下servlet包中的doFilter

        Java EEJDK中提供了一个在servlet包下的doFilter方法实现了责任链模式,具体的参数主要有三个:request、response和FilterChain类型的chain。该方法可以实现对于请求和响应同时进行过滤,即假设有一个请求打过来,三个过滤规则A、B、C按照A-B-C的顺序过滤,当请求响应后 发出的Response会按照C-B-A的规则过滤。这个过程的实现类似于递归算法。 

        我们可以通过这个图来理解这个方法中责任链调用的递归过程,每一次请求打在过滤类上进行处理完成后,就会调用doFilter()方法,并将指针指向下一个过滤类处理请求,下一个类处理后执行doFilter()方法查看是否index==责任链列表的长度,是的话就会返回并回退到上一个过滤类中的doFilter()方法执行并返回。 

按照需求我们需要自行封装Request和Response类、定义Filter类及其相应的实现类,封装的FilterChain类实现具体的责任链模式,demo如下:

package com.crj.test2;import java.util.ArrayList;
import java.util.List;public class ServletChain {public static void main(String[] args) {Request request = new Request();request.str = "大家好999<script>";Response response = new Response();response.str = "response";FilterChain chain = new FilterChain();chain.add(new HTMLFilter()).add(new SensitiveFilter());chain.doFilter(request,response,chain);}
}/*** 处理对象类*/
class Request{String str;
}
class Response{String str;
}/*** Filter接口*/
interface Filter{boolean doFilter(Request request,Response response,FilterChain chain);
}/*** 两个过滤类*/
class HTMLFilter implements Filter{@Overridepublic boolean doFilter(Request request, Response response,FilterChain chain) {request.str = request.str.replaceAll("<", "[").replaceAll(">", "]") + "HTMLFilter()";chain.doFilter(request, response, chain);response.str += "--HTMLFilter()";return true;}
}class SensitiveFilter implements Filter{@Overridepublic boolean doFilter(Request request, Response response,FilterChain chain) {request.str = request.str.replaceAll("996", "955") + " SensitiveFilter()";chain.doFilter(request, response, chain);response.str += "--SensitiveFilter()";return true;}
}/*** 责任链实现类*/
class FilterChain implements Filter{List<Filter> filters = new ArrayList<>();int index = 0;public FilterChain add(Filter f){filters.add(f);return this;}@Overridepublic boolean doFilter(Request request, Response response,FilterChain chain) {if(index==filters.size()) return false;Filter f = filters.get(index);index++;return f.doFilter(request,response,chain);}
}

文章主要使用的是马老师的课程中提供的案例,链接:

https://www.bilibili.com/video/BV1G44y1R7nv?p=14&vd_source=91c021af5a207c9fdf0bd7969d48cbf2


总结

        这篇文章中荔枝主要梳理了设计模式中的责任链模式的相关概念,在这里荔枝没有给出过多的概念性的东西而是侧重于代码场景来理解哈哈。设计模式荔枝学的好慢,最近课也多嘿,可能文章顺序发出来的有点乱。接下来荔枝也会持续学习并产出~~~一起加油转码ing~

今朝已然成为过去,明日依然向往未来!我是小荔枝,在技术成长的路上与你相伴,码文不易,麻烦举起小爪爪点个赞吧哈哈哈~~~ 比心心♥~~~

http://www.zhongyajixie.com/news/9527.html

相关文章:

  • 网上做题扣分在哪个网站上做网站排名top排行榜
  • 有一个做名片的网站西安疫情最新数据消息5分钟前
  • 如何做英文网站推广免费网站怎么注册
  • 牡丹区政府网站建设百度空间登录
  • 泰州网站建设腾讯企点账户中心
  • 做学校网站导航条应该有哪些网址之家
  • 公司网站网页制作建议网站怎么优化关键词排名
  • 做旅游网站的开题报告线上推广100种方式
  • 副业做网站软件谷歌外贸平台叫什么
  • 吉安网站制作公司更厉害的病毒2024
  • 无为建设局网站企业营销策划书范文
  • javascript网站开发自助建站网
  • 做网站首页需要什么资料石家庄新闻
  • 游戏攻略网站怎么做百度电视剧风云榜
  • 电子商务网站域名各大网站收录提交入口
  • 山东嘉邦家居用品公司网站 加盟做经销商多少钱 有人做过吗bt樱桃 磁力岛
  • 做网站浏览器必须用xp系统吗营销型网站定制
  • 怎么注册一个网站做色流百度贴吧广告投放
  • 常营网站建设公司小学生收集的新闻10条
  • 新手网站建设百度大搜是什么
  • 南通做网站多少钱西地那非片多少钱一盒
  • wordpress进入站点关键词完整版
  • wordpress能不能做企业网站潍坊seo推广
  • dedecms景区网站模板手机网站怎么优化关键词
  • 深圳阿里网站设计公司seo推广技巧
  • 做甜品网站关键字排名查询
  • 网络营销策略分析案例seo优化的技巧
  • 建网站怎么做报分系统开发网站建设公司
  • 如何做网站的管理后台曼联vs曼联直播
  • 建材网站方案网络营销战略有什么用