美文网首页
拦截过滤器模式

拦截过滤器模式

作者: Stroman | 来源:发表于2019-11-07 19:14 被阅读0次

总述

最简化的应用场景就是,发送方要发送信息给接收方。但是呢,在信息传输的过程中要经过层层筛选和过滤,这个就是拦截过滤器模式的基本意思了。
就好比你要喝水,但是担心水里不干净,于是安了个净水器,那么从自来水龙头到你的水杯之间,就经过了层层过滤和筛选。
就好像你要乘飞机,从进入航站楼门口到进入机舱之间还要经过层层的安检。
我就举这俩例子来说明拦截过滤器模式的基本思想,我觉得已经很通俗易懂了,你再不明白我就没办法了。

过滤器管理者有啥用呢?

它是负责维护过滤器链条的维修工、包工头、负责人,它负责管理这个过滤器链。你要面对的是不同类型的功能模块,而不是多个同类型的东西,因此要把很多同类型的东西进行统一管理,于是就有了这个过滤器管理者的存在。

怎么理解这个客户端呢?

它是一个隔离层,或者是一个对接的接口。它一边和用户对接,一边和过滤器管理者对接。就好像是常见的图形化操作界面的意思。这是软件设计中层次化的提现,可以让系统结构清晰,功能明确,是非常好的做法。

什么是应用?

我就觉得这个名字起的不好,容易让人理解偏了,我觉得把它叫做消息接收方最恰当,你就按照这个名字去理解才能比较好地理解到。

图示

我觉得单单靠类图难以直观表达这个模式要做的事情。

图示.png

类图

类图.png

效果

正在对水进行沙土过滤
正在对水进行细菌过滤
正在对水进行虫卵过滤
最终还是喝到了水

Process finished with exit code 0

调用

package com.company;

public class Main {

    public static void main(String[] args) {
    // write your code here
        FilterManager manager = new FilterManager();
        manager.addFilter(new Filter1());
        manager.addFilter(new Filter2());
        manager.addFilter(new Filter3());
        manager.setReceiver(new Receiver());

        OperationClient client = new OperationClient();
        client.setManager(manager);
        client.inputMessage("水");
    }
}

过滤器接口

package com.company;

public interface Filter {
    /**
     * 执行过滤的方法,是所有过滤器必须要实现的方法。
     * @param inputString
     */
    public void executeFilt(String inputString);
}

第1个滤镜

package com.company;

public class Filter1 implements Filter {
    @Override
    public void executeFilt(String inputString) {
        System.out.println("正在对" + inputString + "进行沙土过滤");
    }
}

第2个滤镜

package com.company;

public class Filter2 implements Filter {
    @Override
    public void executeFilt(String inputString) {
        System.out.println("正在对" + inputString + "进行细菌过滤");
    }
}

第3个过滤器

package com.company;

public class Filter3 implements Filter {
    @Override
    public void executeFilt(String inputString) {
        System.out.println("正在对" + inputString + "进行虫卵过滤");
    }
}

过滤器管理者

package com.company;

public class FilterManager {
    private FilterChain chain;

    public FilterManager() {
        this.chain = new FilterChain();
    }

    public void addFilter(Filter aFilter) {
        this.chain.addFilter(aFilter);
    }

    public void setReceiver(Receiver receiver) {
        this.chain.setReceiver(receiver);
    }

    public void proccessMessage(String inputString) {
        this.chain.execute(inputString);
    }
}

图形化操作层次

package com.company;

public class OperationClient {
    private FilterManager manager;

    public void setManager(FilterManager manager) {
        this.manager = manager;
    }

    public void inputMessage(String message) {
        this.manager.proccessMessage(message);
    }
}

过滤器链

package com.company;

import java.util.ArrayList;
import java.util.List;

public class FilterChain {
    private List<Filter> filters;
    private Receiver receiver;

    public FilterChain() {
        this.filters = new ArrayList<>();
    }

    public void setReceiver(Receiver receiver) {
        this.receiver = receiver;
    }

    public void execute(String inputString) {
        for (Filter iterator:this.filters) {
            iterator.executeFilt(inputString);
        }
        if (this.receiver != null) {
            this.receiver.getMessage(inputString);
        }
    }

    public void addFilter(Filter aFilter) {
        this.filters.add(aFilter);
    }
}

最终接收端

package com.company;

public class Receiver {
    /**
     * 接收者最终接收到了经过层层过滤的消息。
     * @param inputString
     */
    public void getMessage(String inputString) {
        System.out.println("最终还是喝到了" + inputString);
    }
}

多谢捧场

如果您觉得我的文章有价值,那么赏脸打赏一个,鄙人感激不尽。不过,不打赏看看也是好的,如果有不对的地方,还请您多多指正。



相关文章

  • 拦截过滤器模式

    拦截过滤器模式 拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应...

  • 拦截过滤器模式

    拦截过滤器模式 拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应...

  • java web三大器和三大域

    三大器:过滤器、监听器、拦截器 过滤器 过滤器属于servlet规范。责任链模式设计。在请求进入servlet前调...

  • 拦截过滤器模式

    Intercepting Filter is a JavaEE pattern which creates plu...

  • 拦截过滤器模式

    参考文章 http://www.runoob.com/design-pattern/intercepting-fi...

  • 拦截过滤器模式

    总述 最简化的应用场景就是,发送方要发送信息给接收方。但是呢,在信息传输的过程中要经过层层筛选和过滤,这个就是拦截...

  • 临时工具或者借鉴

    Only for you! 23种设计模式MP 配置yml拦截器过滤器https://www.cnblogs.co...

  • Filter、Interceptor、Aspect学习

    简介:过滤器、拦截器、切面 如何选择? Filter过滤器 过滤器可以拦截到方法的请求和响应ServletRequ...

  • 函数式编程下的filter模式

    过滤器模式,也称为拦截器模式,还称为管道模式。有3个具有代表性的定义:定义1.Bucshmann & Meunie...

  • Spring Boot 拦截器、过滤器、切片 执行顺序

    spring 过滤器 拦截器 切片的执行顺序? 步骤如下 1)过滤器启动2)拦截器启动(拦截器 preHandle...

网友评论

      本文标题:拦截过滤器模式

      本文链接:https://www.haomeiwen.com/subject/qjhsbctx.html