范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

一套过滤器,让你的代码高处不胜寒

  一、介绍
  过滤器模式,顾名思义,从名字上就可以看出主要用于过滤对象,实现起来也很简单!
  从设计的角度看,过滤器模式涉及到三个角色:  抽象过滤器角色:主要定义过滤器的行为;  具体滤器角色:实现或者继承抽象过滤器,完善具体算法;  客户端:客户类提出使用具体类的请求;
  话不多说,代码直接撸起来   二、示例
  下面,我们以班级同学为例,过滤出满足要求的同学,实现过程如下!
  先创建一个数据实体类 Person ,如下: /**  * 数据实体类  */ public class Person {      private String name;//姓名      private String gender;//性别      private int age;//年龄       public String getName() {         return name;     }      //...省略set/get      public Person(String name, String gender, int age) {         this.name = name;         this.gender = gender;         this.age = age;     }      @Override     public String toString() {         return "Person{" +                 "name="" + name + """ +                 ", gender="" + gender + """ +                 ", age=" + age +                 "}";     } }
  然后,创建一个过滤器标准接口 Filter ,代码如下: /**  * 过滤器接口  */ public interface Filter {      /**      * 过滤操作      * @param personList      * @return      */     List filterOperate(List personList); }
  接着,创建过滤器具体实现类 AgeFilter 、GenderFilter ,代码如下: /**  * 过滤已满足18岁的同学  */ public class AgeFilter implements Filter {      @Override     public List filterOperate(List personList) {         List targetList = new ArrayList<>();         for (Person person : personList) {             if(person.getAge() >= 18){                 targetList.add(person);             }         }         return targetList;     } } /**  * 过滤出性别为男的同学  */ public class GenderFilter implements Filter {      @Override     public List filterOperate(List personList) {         List targetList = new ArrayList<>();         for (Person person : personList) {             if("男".equals(person.getGender())){                 targetList.add(person);             }         }         return targetList;     } }
  最后,编写一个测试类如下:  public class FilterClient {      public static void main(String[] args) {         List personList = new ArrayList<>();         personList.add(new Person("程咬金","男",36));         personList.add(new Person("露娜","女",16));         personList.add(new Person("伽啰","女",18));         personList.add(new Person("苏烈","男",40));         personList.add(new Person("武则天","女",24));         personList.add(new Person("韩信","男",16));          //过程出年龄已满18周岁的同学         Filter ageFilter = new AgeFilter();         personList = ageFilter.filterOperate(personList);         System.out.println(personList);         System.out.println("========分隔符=======");          //过滤出性别为男的同学         Filter genderFilter = new GenderFilter();         personList = genderFilter.filterOperate(personList);         System.out.println(personList);     } }
  输出结果:  [Person{name="程咬金", gender="男", age=36}, Person{name="伽啰", gender="女", age=18}, Person{name="苏烈", gender="男", age=40}, Person{name="武则天", gender="女", age=24}] ========分隔符======= [Person{name="程咬金", gender="男", age=36}, Person{name="苏烈", gender="男", age=40}]
  当然,还可以按照姓名过滤,只需要写一个过滤器实现类,然后在客户端加入过滤即可!  三、应用
  过滤器模式的应用,当属我们最熟悉的 JavaWeb 工程中的 Filter ,如果我们想自定义一个过滤器,只需要实现Filter 即可!例如创建一个允许跨域的Filter 过滤器,如下: /**  * Servlet Filter implementation class CrossOriginFilter  */ public class CrossOriginFilter implements Filter {    private boolean isCross = false;      /**      * Default constructor.       */     public CrossOriginFilter() {         // TODO Auto-generated constructor stub     }   /**   * @see Filter#destroy()   */  public void destroy() {   // TODO Auto-generated method stub  }   /**   * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)   */  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {   // TODO Auto-generated method stub   // place your code here   if(isCross){    HttpServletRequest httpServletRequest = (HttpServletRequest)request;             HttpServletResponse httpServletResponse = (HttpServletResponse)response;             System.out.println("拦截请求: "+httpServletRequest.getServletPath()); //            httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");               httpServletResponse.setHeader("Access-Control-Allow-Origin", httpServletRequest.getHeader("Origin"));               httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");               httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");               httpServletResponse.setHeader("Access-Control-Max-Age", "3600");               httpServletResponse.setHeader("Access-Control-Allow-Headers", "x-requested-with");     }   // pass the request along the filter chain   chain.doFilter(request, response);  }   /**   * @see Filter#init(FilterConfig)   */  public void init(FilterConfig fConfig) throws ServletException {   // TODO Auto-generated method stub  }  } 四、总结
  过滤器模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来,操作也比较简单,在实际开发中,使用非常广泛。

昨天面试被问到的缓存淘汰算法FIFOLRULFU及Java实现缓存淘汰算法在高并发高性能的质量要求不断提高时,我们首先会想到的就是利用缓存予以应对。第一次请求时把计算好的结果存放在缓存中,下次遇到同样的请求时,把之前保存在缓存中的数据直接拿来工信部部长肖亚庆深入开展APP整治,对移动互联网服务涉及的诸多环节进行全链条全覆盖监管金融界2月28日消息工信部部长肖亚庆今日出席发布会表示,我为群众办实事实践活动,突出解决了APP治理和适老化改造两个方面的问题。在APP治理方面,通过制定标准技术检验专项整治行业自互联网信息服务算法推荐管理规定明起正式施行国家网信办等四部门联合发布的互联网信息服务算法推荐管理规定,将于明天(3月1日)起正式施行。对于普通用户而言,算法摸不着也看不懂,却在广泛影响着我们通过各种平台获取互联网信息服务。自己买监控摄像头容易安装吗自己买一个监控摄像头想要安装在家里,平时没事就看看实时监控,第一是防盗,第二是注意家人的安全尤其是家里有老人小孩,第三就是看看是不是有陌生人出入。那么自己买到的监控摄像头容易安装吗2月份各价位最值得买的手机全在这里!1199元也能越级体验旗舰机2月快要结束了,本月发布了不少机型,很多朋友挑花了眼,担心买贵不划算,更担心挑的不是合适自己的,买了会后悔。今天快哥整理了2月份各价位最值得买的手机供大家参考,从千元机到六千以上的入冬必备法宝飞利浦暖风机每年深圳的年后总有一段时间的寒潮,加上下雨简直是冷到刺骨啊!这几天78终于还是扛不住决定买个取暖机。在网上搜索对比了很多家,作为一个打工党的我入了台飞利浦暖风机,毕竟是大品牌有保障从3799降到2409,12GB256GB,雷军卖力宣传的手机前不久,红米给广大消费者带来了一款自诩为最冷骁龙8的旗舰手机红米K50电竞版。看到红米K50电竞版这款手机的最终定价之后,很多小伙伴都纷纷表示非常失望。原因无它,就是红米K50电竞呼吁大厂停止内卷,回归常态没想到吧,互联网大厂带头反内卷了。前几天,一条关于微信1065强制员工下班的新闻冲上热搜。所谓1065,是指早上10点下班,晚上6点下班,一周工作5天,这个很好理解。最戳人眼球的,只卖15来万!2022款奇瑞新能源大蚂蚁在新能源市场爆发的今天,如何打造一款能够以实力征服诸多挑剔眼光的产品,是个愈发值得思考的问题。作为基于LIFE绿色智慧模块化技术平台研发的新款纯电SUV,2022款奇瑞新能源大蚂蚁上市途中宝丰新能源大幅增资此前获宁夏宝丰系光伏资产注入宁夏首富党彦宝旗下已启动上市的光伏企业宝丰新能源日前完成增资。宁夏宝丰新能源科技股份有限公司(宝丰新能源)工商信息显示,其于2月24日发生股权变更,其中注册资本由13。2亿元增至1明年取消新能源补贴或收取购置附加税你还会考虑电动车吗?新能源的补贴,已经到了年终末尾,据说这是补贴的最后一个年头,到了明年,一切都只是按照标价出售!如果是这样,那么你还愿意买电动车吗?如果你已经忘记了补贴的政策,那我们来回忆一下。20
喀什古城,晚上好很多去过喀什古城的人都说如果时间允许他愿意在古城漫步从白天到黑夜把一整天的时间都浪费在这里(夜晚的喀什古城大门)(从大门外看古城)穿行于夜晚的古城巷道中灯光或明或暗(喀什古城内一条被爆怀孕产子后,范冰冰再出事明星不是神,该骂还得骂01自范冰冰因为税务问题出事后,关于她的谣言就没有停过尤其是在她和李晨宣布分手之后,流言蜚语更是不断。先是被曝恋爱期间,劈腿富商,意外怀孕,才不得不提了分手。怀孕的消息还没过多久,女主为艺术全果出镜,性感至极前几天搜片,小编的目光马上被一部韩国电影吸引。影片在第14届米兰国际电影节上,入围了最佳导演最佳剧本最佳摄影最佳音乐最佳美术最佳女主角最佳男配角共8个单元的提名。今天特推荐给大家,这些豆瓣8分以上的冷门佳作,绝对值得一看果不想出门,宅在家就看看这些冷门佳作吧!一部被低估的经典犯罪悬疑片囚徒(2013)导演丹尼斯维伦纽瓦主演休杰克曼杰克吉伦哈尔这是一部较为经典的社会派和本格派综合的探案题材悬疑片,整赵丽颖冯绍峰分财产?岳云鹏得罪张钧甯?1。赵丽颖冯绍峰拒绝捆绑?赵丽颖冯绍峰自从结婚之后,因为鲜少合体秀恩爱,坊间关于两人婚变的传闻就没有停下来过,上个月就盛传他们已经在办离婚手续,财产分割正在进行时。因为两位当事人对新疆克州彻底火了!再次登上央视,这里的景色被全国人民盯上了素有万山之州美称的克孜勒苏柯尔克孜自治州,不论你站在州内哪个方位,都能看见绵延的群山不论你从哪个方向出州,都要在山脚下穿行或在山谷内越进。您好,我是克孜勒苏柯尔克孜自治州!大家都亲常州到苏州同里,这里有世界文化遗产,还有欧美游客慕名而来今年苏南梅雨季节特别长,已经43天,天终于放晴了,看看天气预报,24号,25号两天都是多云天气,最高温度只有28度,夏日里难得的出游好时光,说走就走,老两口准备到同里,周庄古镇去看常州,开发商拍得200多亩地,改造成古典园林,免费开放为哪般上个月最后一个周日,常州老年自行车骑游队骑行常州叶园,我因不得闲没能跟去,国庆时间参加骑行活动时,常州骑友告诉我叶园是个人建造的古典园林,可看的好东西不少,让我产生了想带老伴去一看70周岁可以考驾照开车啦,常州骑往青岛用6天,开车当天早早到今天中午,中央电视台新闻频道播出一条新闻,公安部放宽小型汽车和轻便摩托车驾驶证申请年龄,取消70周岁年龄上限,太好了,70岁以上的老人,可以考驾照开着汽车去接送小孩了。电动自行车新常州骑行到秦皇岛,老龙头典故多,八国联军军营遗址前受教育6月7日,晴,一人一车,常州出发,环山东半岛,渤海湾骑行第18天,早晨5点从乐亭县228国道农家旅馆出发,沿228国道,上午10点多钟骑到秦皇岛市中心北戴河区住店,将自行车拖进旅馆常州堵车少,高架路二百多公里,京杭运河312国道南移功不可没周末跟着常州市老年自行车集体骑行,去看奔牛镇及邹区镇的美丽乡村,经过棕榈路上的平陵大桥,桥下京杭大运河里百舸竞流,几百吨级货轮来来去去,刚刚下桥,路旁出现左拐312国道的指路牌,怎