设计模式之过滤器模式
【摘要】 博主上次分析完cas客户端源码后,发现了其实就是一个过滤器模式,对请求以及session一直做校验,每个过滤器都有各自的工作,互不影响耦合性低,所以就模仿其源码,做了一次过滤器模式的学习,图示如下其实过滤器整个类可以不用,只不过在jetty中,过滤器整合类不知有过滤器还有其他属性,比如config配置等。如下:参考即可好了,我们来看一下过滤器模式,一个过滤器接口定义方法,多个实现类去实现具体...
博主上次分析完cas客户端源码后,发现了其实就是一个过滤器模式,对请求以及session一直做校验,每个过滤器都有各自的工作,互不影响耦合性低,所以就模仿其源码,做了一次过滤器模式的学习,图示如下
其实过滤器整个类可以不用,只不过在jetty中,过滤器整合类不知有过滤器还有其他属性,比如config配置等。如下:参考即可
好了,我们来看一下过滤器模式,一个过滤器接口定义方法,多个实现类去实现具体操作过滤,一个整合类增加一个过滤器,一个过滤器链表去实现以节点类型,依次进行过滤
该接口进行定义方法:
import java.io.IOException;
import java.util.List;
/**
* @title: DemoFilter
* @Author junyu
* 旧巷里有一个穿着白衬衫笑起来如太阳般温暖我的少年。
* 记忆里有一个穿着连衣裙哭起来如孩子般讨人喜的女孩。
* 他说,哪年树弯了腰,人见了老,桃花落了白发梢,他讲的笑话她还会笑,那便是好。
* 她说,哪年国改了号,坟长了草,地府过了奈何桥,她回头看时他还在瞧,就不算糟。
* @Date: 2020/7/18 9:23
* @Version 1.0
*/
public interface DemoFilter{
void doFilter(List list, DemoFilterChain demoFilterChain);
}
DemoFilter
多个实现类:
import java.util.List;
public class AFilterImpl implements DemoFilter{
@Override
public void doFilter(List list, DemoFilterChain demoFilterChain) {
System.out.println("AFilterImpl is beginning");
if (list.isEmpty()) {
System.out.println("该列表为空,无需过滤!");
return;
}
demoFilterChain.doFilter(list);
}
}
AFilterImpl
import java.util.List;
public class BFilterImpl implements DemoFilter{
@Override
public void doFilter(List list, DemoFilterChain demoFilterChain) {
System.out.println("BFilterImpl is beginning");
System.out.println("list`s body:");
list.stream().forEach(one ->{
System.out.print( one + ",");
});
demoFilterChain.doFilter(list);
}
}
BFilterImpl
一个整合类
public class FilterHolder{
private transient DemoFilter filter;
public DemoFilter getFilter() {
return filter;
}
public void setFilter(DemoFilter filter) {
this.filter = filter;
}
}
FilterHolder
一个过滤器链表
import java.util.List;
public class DemoFilterChain{
FilterHolder filterHolder;
DemoFilterChain next;
DemoFilterChain(List<DemoFilter> list){
if (list.isEmpty()) {
return;
}
filterHolder = new FilterHolder();
filterHolder.setFilter(list.get(0));
list.remove(0);
next = new DemoFilterChain(list);
}
public void doFilter(List list) {
if (filterHolder != null) {
DemoFilter filter = filterHolder.getFilter();
filter.doFilter(list,next);
}
}
}
DemoFilterChain
进行测试
import java.util.ArrayList;
import java.util.List;
public class TestMain {
public static void main(String[] args) {
List<DemoFilter> list = new ArrayList<>();
AFilterImpl aFilter = new AFilterImpl();
BFilterImpl bFilter = new BFilterImpl();
list.add(aFilter);
list.add(bFilter);
DemoFilterChain demoFilterChain = new DemoFilterChain(list);
List<String> filterList = new ArrayList<>();
filterList.add("this is filter string");
filterList.add("this is filter end");
demoFilterChain.doFilter(filterList);
}
}
输出结果:
AFilterImpl is beginning
BFilterImpl is beginning
list`s body:
this is filter string,this is filter end,
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)