过滤器模式

描述

拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。

实质(参考过滤器链工作):

原始数据->过滤器1->过滤器2->过滤器3->最终需要的数据

场景

此篇我们以垃圾回收回收为例来描述这一模式

我们需要在一堆垃圾中 选出各种各样的垃圾 来进行分类 然后再过滤出来不是垃圾被回收掉的东西

UML类图

编码

定义垃圾的属性(拦截器)

@Data

@ToString

@AllArgsConstructor

@NoArgsConstructor

public class Rubbish {

private String name;

private boolean isA;

private boolean isB;

private boolean isC;

}

创建一个检查垃圾的接口(拦截器)

public interface CheckRubbish {

public List check(List list);

}

编写有哪几种垃圾(几种拦截器)

public class A implements CheckRubbish {

@Override

public List check(List list) {

List A_list = new ArrayList<>();

list.forEach(item -> {

if (item.isA()) {

A_list.add(item);

}

});

return A_list;

}

}

public class B implements CheckRubbish {

@Override

public List check(List list) {

List B_List = new ArrayList<>();

list.forEach(item -> {

if (item.isB()) {

B_List.add(item);

}

});

return B_List;

}

}

public class C implements CheckRubbish {

@Override

public List check(List list) {

List C_List = new ArrayList<>();

list.forEach(item -> {

if (item.isC()) {

C_List.add(item);

}

});

return C_List;

}

}

测试 : 我们创建一个list(垃圾堆) 用来进行垃圾过滤

public class Test {

public static void main(String[] args) {

List list = new ArrayList<>();

list.add(new Rubbish("过期香蕉", true, false, false));

list.add(new Rubbish("过期牛奶", false, false, true));

list.add(new Rubbish("过期纸巾", false, true, false));

list.add(new Rubbish("正常牛奶", false, false, false));

A a = new A();

B b = new B();

C c = new C();

System.out.println("A 垃圾");

printRubbish(a.check(list));

System.out.println("B 垃圾");

printRubbish(b.check(list));

System.out.println("C 垃圾");

printRubbish(c.check(list));

}

private static void printRubbish(List list){

list.forEach(System.out::println);

}

}

垃圾分类:

A 垃圾

Rubbish(name=过期香蕉, isA=true, isB=false, isC=false)

B 垃圾

Rubbish(name=过期纸巾, isA=false, isB=true, isC=false)

C 垃圾

Rubbish(name=过期牛奶, isA=false, isB=false, isC=true)

过滤出来的不是垃圾的:

list.add(new Rubbish("正常牛奶", false, false, false));

呈易

发布了16 篇原创文章 · 获赞 5 · 访问量 1799

私信

关注

标签:false,List,list,垃圾,new,挑三拣四,Java,设计模式,public

来源: https://blog.csdn.net/qq_42252844/article/details/104517682

java filter 模式,Java设计模式----过滤器模式(挑三拣四)相关推荐

  1. 设计模式 过滤器模式

    过滤器模式(Filter Pattern)或标准模式(Criteria Pattern) 是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来.这种 ...

  2. 组合模式_Java设计模式-组合模式

    在现实生活中,存在很多"部分-整体"的关系,例如,大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等.在软件开发中也是 ...

  3. 代理模式 委派模式 策略模式_设计模式 - 委派模式

    理解 首先委派模式不属于23种设计模式. 所谓委派,个人理解是:将为达到最终结果的事情交给其他人或中间人来干,我只要最终结果,其他的事情,由我委派的人来安排. 更直白的表达就是,比如,我们想要盖一栋楼 ...

  4. Java入门之初识设计模式---单列模式

    设计模式 是软件开发人员在软件开发过程中面临的一般问题的解决方案 单例模式 目的:使得类的一个对象成为该类系统中的唯一实例 定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供 因此,设计要点是 ...

  5. java 行为模式_java设计模式--行为模式

    前言 行为模式是描述多个类与对象之间通过协作共同完成单个对象无法单独完成的任务. 行为模式分为: 类行为模式通过集成在类之间分派行为 对象行为模式通过组合或聚合在对象之间分配行为 行为模式: 模板方法 ...

  6. java原始模型模式_java设计模式--原始模型模式

    简介 原始模型模式属于对象的创建模式.通过一个原型对象来指明要创建对象的类型,然后用复制原型对象的方法来创建出更多同类型的对象. Java所有的类都是从java.lang.Object类继承来的,Ob ...

  7. java输出不同颜色_Java设计模式-策略模式、状态模式

    推荐阅读: 一只Tom猫:都是"Redis惹的祸",害我差点挂在美团三面,真是"虚惊一场"! java喵:6大面试技能树:JAVA基础+JVM+算法+数据库+计 ...

  8. java copy-on-write_[Java并发-18-并发设计模式] COW模式:Copy-on-Write模式的应用领域

    在上一篇文章中我们讲到 Java 里 String 这个类在实现 replace() 方法的时候,并没有更改原字符串里面 value[] 数组的内容,而是创建了一个新字符串,这种方法在解决不可变对象的 ...

  9. java模板方法模式_JAVA 设计模式 模板方法模式

    定义 模板方法模式 (Template Method) 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模 ...

最新文章

  1. eas库存状态调整单不能反审核_石材家装企业采购库存管理流程案例
  2. html支持的语音文件格式,html5中如何设置audio支持音频格式
  3. Spring Cloud Alibaba:Sentinel实现熔断与限流
  4. unity 坐标系转换_Unity的几种坐标系及相互转换
  5. 随机摄动法 matlab 随机振动,基于随机摄动法的齿轮系统动态响应及灵敏度分析...
  6. flink on yarn 模式缺少资源,出现任务堵塞现象
  7. 自己建设网站需要学习什么?
  8. 【上电即上华为云】华为云openCPU智联模组_wifi_HF-LPX70_RISC-V_LwM2M
  9. mac os无法登录appstore的解决方法
  10. vue+element 压缩上传图片
  11. 嵌入式编程与软件编程思想不同浅见
  12. grafana绘图配置查询变量+多级变量联动
  13. html中right的作用,css3 nav-right属性怎么用?
  14. CAS单点登录(SSO)介绍及部署
  15. 2022年全球与中国烟酰胺单核苷酸(NMN)市场现状及未来发展趋势
  16. python绘制语谱图(详细注释)
  17. python文件管理_python——文件管理
  18. 【华人学者风采】聂礼强 山东大学
  19. 使用Navicat将表设计导出数据库设计文档
  20. 微信小程序的准备工作

热门文章

  1. 【渝粤教育】电大中专电子商务网站建设与维护 (8)作业 题库
  2. 【渝粤题库】广东开放大学 计算机英语 形成性考核
  3. 【无线lora模块星型组网】lora无线模块专利技术 跳频扩频 支持200节点并发
  4. 招远西苑学校计算机老师,招远市西苑学校积极开展综合实践活动
  5. 对c语言字符数组描述错误的是,下述对C语言字符数组的描述中错误的是( )。
  6. 在vscode上编写jsp_使用vscode高效编写博客园博客
  7. matlab中数值的取整、四舍五入、文本输出
  8. [2021.07.25更新]循环冗余校验(CRC)的MATLAB实现
  9. 简单排序--选择排序
  10. 根据thickbox定制自己的遮罩层