java过滤器模式

简介: 过滤器模式(Filter Pattern),这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。

java过滤器模式


前言

过滤器模式(Filter Pattern),这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。

过滤器模式是很多java框架常用的模式之一


1,故事

人事通过招聘,面试,从而过滤出不同水平的开发工程师,进而选择通过。

2,定义开发工程师对象

@Data
public class DevelopEngineer {
    //技能等级
    private String level;
    //姓名
    private String name;
    //年龄
    private Integer age;

    DevelopEngineer(String level,String name,Integer age){
        this.level = level;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "开发工程师:" +
            "{ 职业等级 : '" + level + '\'' +
            ", 姓名:'" + name + '\'' +
            ", 年龄: " + age +
            '}';
    }
}

3,定义过滤器顶层接口 filter

public abstract class Filter {
    //筛选
    public abstract List<DevelopEngineer> choose(List<DevelopEngineer> devList);
}

4,HighDevFilter 高级开发过滤器

public class HighDevFilter extends Filter{
    //选择高级工程师
    @Override
    public List<DevelopEngineer> choose(List<DevelopEngineer> devList) {
        List<DevelopEngineer> res = new ArrayList<>();
        for (DevelopEngineer engineer : devList) {
            if(engineer.getLevel().equals("高级")){
                res.add(engineer);
            }
        }
        return res;
    }
}

5,MiddleDevFilter 中级开发过滤器

public class MiddleDevFilter extends Filter{
    //选择中级工程师
    @Override
    public List<DevelopEngineer> choose(List<DevelopEngineer> devList) {
        List<DevelopEngineer> res = new ArrayList<>();
        for (DevelopEngineer engineer : devList) {
            if(engineer.getLevel().equals("中级")){
                res.add(engineer);
            }
        }
        return res;
    }
}

6,年龄过滤器

public class AgeDevFilter extends Filter{
    @Override
    public List<DevelopEngineer> choose(List<DevelopEngineer> devList) {
        List<DevelopEngineer> res = new ArrayList<>();
        for (DevelopEngineer engineer : devList) {
            //选择出年龄小于35 大于 25 的工程师
            if(engineer.getAge() > 25 && engineer.getAge() <= 35){
                res.add(engineer);
            }
        }
        return res;
    }
}

7,测试

过滤出年龄大约25小于35的高级开发工程师

public static void main(String[] args) {
        List<DevelopEngineer> list = new ArrayList<>();
        list.add(new DevelopEngineer("高级","东升",28));
        list.add(new DevelopEngineer("高级","静子",37));
        list.add(new DevelopEngineer("中级","红岩",25));
        list.add(new DevelopEngineer("初级","晓东",30));
        list.add(new DevelopEngineer("中级","珂子",20));
        list.add(new DevelopEngineer("中级","春子",20));
        list.add(new DevelopEngineer("高级","刘一",30));
        //初始化
        HighDevFilter highDevFilter = new HighDevFilter();
        AgeDevFilter ageDevFilter = new AgeDevFilter();
        //两次过滤输出
        print(ageDevFilter.choose(highDevFilter.choose(list)));
    }

    private static void print(List<DevelopEngineer> list){
        for (DevelopEngineer engineer : list) {
            System.out.println(engineer.toString());
        }
    }

8,结果

开发工程师:{ 职业等级 : '高级', 姓名:'东升', 年龄: 28}
开发工程师:{ 职业等级 : '高级', 姓名:'刘一', 年龄: 30}

总结

过滤器是较为常用的设计模式之一,可以配合责任链模式,进行链式过滤

目录
相关文章
|
1天前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
36 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
6天前
|
设计模式 前端开发 Java
19:Web开发模式与MVC设计模式-Java Web
19:Web开发模式与MVC设计模式-Java Web
16 4
|
10天前
|
Java 开发者 UED
Java 异步和事件驱动编程:探索响应式模式
【4月更文挑战第27天】在现代软件开发中,异步和事件驱动编程是提高应用性能和响应性的关键策略。Java 提供了多种机制来支持这些编程模式,使开发者能够构建高效、可扩展的应用程序。
21 4
|
10天前
|
设计模式 消息中间件 Java
Java 设计模式:探索发布-订阅模式的原理与应用
【4月更文挑战第27天】发布-订阅模式是一种消息传递范式,被广泛用于构建松散耦合的系统。在 Java 中,这种模式允许多个对象监听和响应感兴趣的事件。
27 2
|
11天前
|
人工智能 监控 数据可视化
Java智慧工地云平台源码带APP SaaS模式 支持私有化部署和云部署
智慧工地是指应用智能技术和互联网手段对施工现场进行管理和监控的一种工地管理模式。它利用传感器、监控摄像头、人工智能、大数据等技术,实现对施工现场的实时监测、数据分析和智能决策,以提高工地的安全性、效率和质量(技术架构:微服务+Java+Spring Cloud +UniApp +MySql)。
29 4
|
13天前
|
人工智能 监控 安全
JAVA基于SaaS模式的智慧工地云平台源码(云智慧工地解决方案)
智慧工地支持多端展示(PC端、手机端、平板端)SaaS微服务架构,项目监管端,工地管理端源码
18 0
|
14天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
14天前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
|
18天前
|
存储 Java 测试技术
滚雪球学Java(16):玩转JavaSE-do-while循环语句:打破传统思维模式
【4月更文挑战第5天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
38 7
滚雪球学Java(16):玩转JavaSE-do-while循环语句:打破传统思维模式
|
22天前
|
缓存 小程序
Java+saas模式 智慧校园系统源码MySQL5.7+ elmentui前后端分离架构 让校园管理更高效的数字化平台系统源码
智慧校园是在数字通增强版基础上,研发的一套面向教育行业的数字化校园软件,其显著特点是集学校网站、协同办公、即时通讯、网络空间、移动办公于一体。在满足教职工日常办公需要的同时,拥有诸多教育行业功能,并提供便捷易用的“家校通”平台以满足老师、学生、家长的日常交流。数字通智慧校园教育版中的协同办公、即时通讯、移动办公等功能模块随通用版一同改进,将网络办公最新技术应用到教育行业。
25 1