设计模式之过滤器模式

哈喽,今天看下一个比较简单的模式,就是过滤器模式。就是使用不同的标准来过滤一组对象,通过逻辑运算来解耦的方式把他们连接起来。是不是很简单,下面我们一起看看吧。

1: 简介

目的:使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来;

实现:制定不同的规则来对一组对象进行过滤,然后对过滤结果进行分组。

2: 代码实例

由于该模式比较简单,我们直接上代码

//过滤的对象
public class Person {
   
    private String name;
    private String gender;

    public Person(String name, String gender) {
   
        this.name = name;
        this.gender = gender;
    }

    public String getName() {
   
        return name;
    }

    public void setName(String name) {
   
        this.name = name;
    }

    public String getGender() {
   
        return gender;
    }

    public void setGender(String gender) {
   
        this.gender = gender;
    }

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



//定义过滤器接口
public interface Filter {
   
    public List<Person> filter(List<Person> personList);
}

//男生过滤器
public class BoylFilter implements Filter{
   


    @Override
    public List<Person> filter(List<Person> personList) {
   
        return  personList.stream().filter(person -> person.getGender().equals("男")).collect(Collectors.toList());
    }
}

//女生过滤
public class GirlFilter implements Filter{
   


    @Override
    public List<Person> filter(List<Person> personList) {
   
        return  personList.stream().filter(person -> person.getGender().equals("女")).collect(Collectors.toList());
    }
}

//测试类
public class TestMain {
   

    public static void main(String[] args) {
   

        List<Person> objects = new LinkedList<>();

        for (int i = 0; i < 10; i++) {
   
            if (i <5) {
   
                objects.add(new Person(String.valueOf(i),"男"));
            } else {
   
                objects.add(new Person(String.valueOf(i),"女"));
            }
        }

        BoylFilter boylFilter = new BoylFilter();
        List<Person> filter = boylFilter.filter(objects);
        filter.forEach(person -> System.out.println(person.toString()));
    }
}

看完代码是不是很简单

3:应用场景

上面已经看到了,就是对一组对象进行筛选过滤。例如 SpringMVC中的过滤器,过滤某些请求。

4: 优缺点

优点: 简单,解耦,使用方便

缺点: 查了资料,竟然发现这个模式没有缺点。

相关推荐

  1. 设计模式过滤器模式

    2024-01-08 12:06:02       57 阅读
  2. 设计模式模板模式

    2024-01-08 12:06:02       21 阅读
  3. GO设计模式——9、过滤器模式(结构型)

    2024-01-08 12:06:02       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-08 12:06:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-08 12:06:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-08 12:06:02       82 阅读
  4. Python语言-面向对象

    2024-01-08 12:06:02       91 阅读

热门阅读

  1. 15.三数之和(双指针,C解答附详细分析)

    2024-01-08 12:06:02       59 阅读
  2. C++ 具名要求-全库范围的概念

    2024-01-08 12:06:02       48 阅读
  3. 极智AI | 谈谈AI发展第六篇:AI大模型应用

    2024-01-08 12:06:02       53 阅读
  4. ajax请求假数据的方法

    2024-01-08 12:06:02       66 阅读
  5. 智能合约安全之Solidity重入攻击漏洞的深入理解

    2024-01-08 12:06:02       56 阅读
  6. 关于TCP vegas算法杂谈

    2024-01-08 12:06:02       61 阅读
  7. 浅谈前端工程化

    2024-01-08 12:06:02       55 阅读
  8. CComboBox重载在CListCtrl中使用

    2024-01-08 12:06:02       61 阅读
  9. 入门使用mybatis-plus

    2024-01-08 12:06:02       45 阅读
  10. 【WPF.NET开发】为控件中的焦点设置样式

    2024-01-08 12:06:02       63 阅读
  11. 每日一练:LeeCode-641. 设计循环双端队列【设计】

    2024-01-08 12:06:02       57 阅读
  12. Git 概念与基础命令

    2024-01-08 12:06:02       62 阅读
  13. centos8拉取nginx最新版本到本地

    2024-01-08 12:06:02       46 阅读