09 过滤器模式

这篇具有很好参考价值的文章主要介绍了09 过滤器模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

过滤器模式

用来过滤数据,通过一个或多个定义过滤规则,窜起来过滤原始数据。
09 过滤器模式,设计模式,windows

demo

package structuralpattern;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author tx
 * @version 1.0
 * @date 2024/1/8 9:00
 * @description:
 * 过滤器模式
 * 用以筛选数据
 */
public class FilterPattern {
    /**
     * 打印list,方便展示
     */
    public static <T> void printList(List<T> list){
        System.out.println("[");
        for (T one : list) {
            System.out.println(one.toString());
        }
        System.out.println("]");
    }
    public static void main(String[] args) {
        // 过滤器创建
        Filter filter1 = new Filter1();
        Filter filter2 = new Filter2();
        Filter3 filter3 = new Filter3();
        // 构造假数据
        List<Product> products = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            products.add(new Product("张"+i, (int) Math.round(Math.random()*20)));
            products.add(new Product("李"+i, (int) Math.round(Math.random()*20)));
        }
        // 原始数据打印
        System.out.println("原始数据");
        FilterPattern.printList(products);
        // 使用单一过滤器,size 大于5的
        System.out.println("使用单一过滤器,size 大于5的:");
        List<Product> ans1 = filter1.filter(products);
        FilterPattern.printList(ans1);
        // 使用单一过滤器,姓名包含张的
        System.out.println("使用单一过滤器,姓名包含张的:");
        List<Product> ans2 = filter3.filter(products);
        FilterPattern.printList(ans2);
        // 使用组合过滤器,组合上面三种条件
        System.out.println("使用组合过滤器,组合上面三种条件:");
        ArrayList<Filter> filtersArgs = new ArrayList<>();
        filtersArgs.add(filter1);
        filtersArgs.add(filter2);
        filtersArgs.add(filter3);
        Filter filters = new Filters(filtersArgs);
        List<Product> ans3 = filters.filter(products);
        FilterPattern.printList(ans3);

    }
}

/**
 * 组合过滤器
 */
class Filters implements Filter{
    private final List<Filter> filters;
    public Filters(List<Filter> filters) {
        this.filters = filters;
    }
    @Override
    public List<Product> filter(List<Product> products) {
        List<Product> local = products;
        for (Filter filter : filters) {
            local = filter.filter(local);
        }
        return local;
    }
}


/**
 * 过滤器的接口
 */
interface Filter{
    List<Product> filter(List<Product> products);
}
/**
 * 过滤大小大于5的
 */
class Filter1 implements Filter{
    @Override
    public List<Product> filter(List<Product> products) {
        return products.stream()
                .filter(p -> p.size() > 5)
                .collect(Collectors.toList());
    }
}
/**
 * 过滤大小小于15的
 */
class Filter2 implements Filter{
    @Override
    public List<Product> filter(List<Product> products) {
        return products.stream()
                .filter(p -> p.size() <15)
                .collect(Collectors.toList());
    }
}
/**
 * 过滤名字含有 张 的
 */
class Filter3 implements Filter{
    @Override
    public List<Product> filter(List<Product> products) {
        return products.stream()
                .filter(p -> p.name().contains("张"))
                .collect(Collectors.toList());
    }
}

/**
 * 需要被过滤的对象
 */
class Product{
    private String name;
    private Integer size;

    public Product(String name, Integer size) {
        this.name = name;
        this.size = size;
    }

    public String name() {
        return name;
    }

    public Integer size() {
        return size;
    }

    @Override
    public String toString() {
        return "Product{" +
                "name='" + name + '\'' +
                ", size=" + size +
                '}';
    }
}

demo 打印
09 过滤器模式,设计模式,windows文章来源地址https://www.toymoban.com/news/detail-788768.html

到了这里,关于09 过滤器模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 品味布隆过滤器的设计之美

    布隆过滤器是一个精巧而且经典的数据结构。 你可能没想到: RocketMQ、 Hbase 、Cassandra 、LevelDB 、RocksDB 这些知名项目中都有布隆过滤器的身影。 对于后端程序员来讲,学习和理解布隆过滤器有很大的必要性。来吧,我们一起品味布隆过滤器的设计之美。 我们先来看一个商品

    2023年04月14日
    浏览(22)
  • jQuery选择器(二)(基本过滤器,内容过滤器,可见过滤器)

    写在前面 jQuery是一个快速、简洁的 JavaScript 框架,是继Prototype之后又一个优秀的 JavaScript 代码库。jQuery的设计宗旨是“WriteLess,DoMore”,即倡导写更少的代码,做 更多的事情。jQuery封装了 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,优化HTML文档操作、事件

    2024年02月02日
    浏览(46)
  • Gateway自定义过滤器——全局过滤器

    首先,我们要知道全局过滤器其实是特殊路由过滤器(特殊的GatewayFilter),会有条件地作用于所有路由。 为什么要自定义全局过滤器?就好比是看大门的保安大叔,平时主要是做好进出大门外来人员登记即可,但是因为新冠疫情,现在还需要给外来人员测量体温等等。而已有的

    2024年02月16日
    浏览(34)
  • 异常过滤器—MVC中异常过滤器使用

    异常过滤器( Exception Filters )是 ASP.NET Core 中用于处理全局异常的机制。它们允许你在发生异常时捕获、处理和记录异常,并提供自定义的异常处理逻辑。异常过滤器在整个应用程序范围内生效,可以用于处理各种异常情况。用于实现常见的错误处理策略,没有之前和之后事

    2024年02月13日
    浏览(34)
  • Javaweb | 过滤器、配置、过滤器链、优先级

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 概念 过滤器(Filter)是处于客户端与服务器目标资源之间的一道过滤技术 用户的请求和响应都需要经过过滤器 过滤器作用 执行地位在Servlet之前,客户端发送请求是,会先经过Filter,再到达目标Servlet中;响应时,会根

    2023年04月17日
    浏览(35)
  • 结果过滤器—MVC项目中结果过滤器(Result Filter)使用

    结果过滤器( ResultFilter ),是对执行的Action结果进行处理的一种AOP思想,适用于任何需要直接环绕 View 或格式化处理的逻辑。结果过滤器可以 替换或更改 Action 结果 。在 IActionResult 执行的前后执行,使用它能够控制Action的执行结果,比如:格式化结果等。需要注意的是,它只

    2024年02月12日
    浏览(33)
  • 操作过滤器—MVC中使用操作过滤器实现JWT权限认证

    上一篇文章分享了授权过滤器实现JWT进行鉴权,文章链接:授权过滤器—MVC中使用授权过滤器实现JWT权限认证,接下来将用操作过滤器实现昨天的JWT鉴权。 ​ 与授权过滤器大部分一样,只是执行的时机和继承的接口有所不同。操作过滤器是在Action执行的前和后进行调用执行

    2024年02月13日
    浏览(32)
  • 资源过滤器—MVC中使用资源过滤器实现不执行Action方法体读取缓存信息返回

    上两篇文章分享了过滤器实现JWT进行鉴权,分别是通过授权过滤器和操作过滤器实现,这两个过滤器也是最常用的。文章链接:授权过滤器—MVC中使用授权过滤器实现JWT权限认证,操作过滤器—MVC中使用操作过滤器实现JWT权限认证,接下来将简单的谈谈资源过滤器在MVC中如何

    2024年02月13日
    浏览(34)
  • JavaWeb过滤器(Filter)详解,是时候该把过滤器彻底搞懂了(万字说明)

            注意:这篇文章很长,学习完后将会解决你对于过滤器(Filter)的所有疑惑,下面将通过理论和代码的结合来进行讲解演示.....    目录 基本介绍 过滤器原理 过滤器(Filter)接口 使用过滤器(Filter) 创建过滤器(Fliter) 使用过滤器(Filter) 配置过滤器(Filter)拦截路径  注解方式

    2024年02月02日
    浏览(31)
  • spring boot过滤器实现项目内接口过滤

    由于业务需求,存在两套项目,一套是路由中心,一套是业务系统. 现在存在问题是,路由中心集成了微信公众号与小程序模块功能,业务系统部署了多套服务. 现在需要通过调用路由中心将接口重新路由到指定的业务系统中 将小程序,公众号用户信息与业务系统做绑定 将路由中心的

    2023年04月20日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包