过滤器模式
描述
拦截过滤器模式(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