设计模式--过滤器模式(标准模式)

Java设计模式学习总结(9)——结构型模式之过滤器模式(标准模式) 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。实现我们将创建一个Person对象、Criteria接口和实现了该接口的实体类,来过滤 Person 对象的列表。CriteriaPatter... 阅读详情

简介

过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。
优点:简单,解耦,使用方便。
使用场景:需要进行筛选时。

角色

过滤器模式包含如下角色:
  (1) AbstractFilter(抽象过滤器角色):定义过滤的方法。
  (2) ConcreteFilter(具体滤器角色):实现过滤的方法,对目标对象集合进行逻辑过滤,最后再返回一个过滤后的集合。
  (3) Subject(被过滤角色):目标角色,源数据,具体过滤器会对其进行逻辑处理。

简单示例

1.创建Subject(被过滤角色)

public class Student {
    private String name;
    private String gender;
    private String grade;
//getter setter .....
}

2.创建 AbstractFilter(抽象过滤器角色)

public interface Filter {
    public List<Student> doFilt(List<Student> students);
}

3.创建ConcreteFilter(具体滤器角色)

public class Boy implements Filter {
    @Override
    public List<Student> doFilt(List<Student> students) {
        List<Student> students1 = new ArrayList<>();
        for (Student student: students) {
            if (student.getGender().equals("boy")){
                students1.add(student);
            }
        }
        return students1;
    }
}
public class Girl implements Filter{
    @Override
    public List<Student> doFilt(List<Student> students) {
        List<Student> students1 = new ArrayList<>();
        for (Student student: students) {
            if (student.getGender().equals("girl")){
                students1.add(student);
            }
        }
        return students1;
    }
}
public class GradeOne implements Filter {
    @Override
    public List<Student> doFilt(List<Student> students) {
        List<Student> students1 = new ArrayList<>();
        for (Student student: students) {
            if (student.getGrade().equals("one")){
                students1.add(student);
            }
        }
        return students1;
    }
}
public class GradeTwo implements Filter {
    @Override
    public List<Student> doFilt(List<Student> students) {
        List<Student> students1 = new ArrayList<>();
        for (Student student: students) {
            if (student.getGrade().equals("two")){
                students1.add(student);
            }
        }
        return students1;
    }
}
public class And implements Filter{
    private Filter filter1;
    private Filter filter2;

    public And(Filter filter1, Filter filter2) {
        this.filter1 = filter1;
        this.filter2 = filter2;
    }

    @Override
    public List<Student> doFilt(List<Student> students) {
        List<Student> students2 = filter1.doFilt(students);
        return filter2.doFilt(students2);
    }
}
public class Or implements Filter {
    private Filter filter1;
    private Filter filter2;
    public Or(Filter filter1,Filter filter2) {
        this.filter1 = filter1;
        this.filter2 = filter2;
    }
    @Override
    public List<Student> doFilt(List<Student> students) {
        List<Student> students1 = filter1.doFilt(students);
        List<Student> students2 = filter2.doFilt(students);
        for(Student student : students2) {
            if(!students1.contains(student)) {
                students1.add(student);
            }
        }
        return students1;
    }
}

4.Main验证

public class FilterMain extends Boy {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<Student>();
        students.add(new Student("hello1","boy","one"));
        students.add(new Student("hello2","girl","two"));
        students.add(new Student("hello3","boy","two"));
        students.add(new Student("hello4","girl","one"));
        students.add(new Student("hello5","girl","one"));
        students.add(new Student("hello6","boy","two"));

        Filter boy = new Boy();
        System.out.println("boy list is : " +  boy.doFilt(students));
        Filter girl = new Girl();
        System.out.println("girl list is : " +  girl.doFilt(students));

        Filter one = new GradeOne();
        System.out.println("GradeOne list is : " +  one.doFilt(students));
        Filter two = new GradeTwo();
        System.out.println("GradeTwo list is : " +  two.doFilt(students));

        Filter oneBoy = new And(one,boy);
        System.out.println("GradeOne Boy list is : " + oneBoy.doFilt(students));

        Filter twoGirl = new And(two,girl);
        System.out.println("GradeTwo Girl list is : " + twoGirl.doFilt(students));

        Filter grilOrOne = new Or(one,girl);
        System.out.println("GradeOne or girl list is :" + grilOrOne.doFilt(students));
    }
}

boy list is : [Student{name='hello1', gender='boy', grade='one'}, Student{name='hello3', gender='boy', grade='two'}, Student{name='hello6', gender='boy', grade='two'}]
girl list is : [Student{name='hello2', gender='girl', grade='two'}, Student{name='hello4', gender='girl', grade='one'}, Student{name='hello5', gender='girl', grade='one'}]
GradeOne list is : [Student{name='hello1', gender='boy', grade='one'}, Student{name='hello4', gender='girl', grade='one'}, Student{name='hello5', gender='girl', grade='one'}]
GradeTwo list is : [Student{name='hello2', gender='girl', grade='two'}, Student{name='hello3', gender='boy', grade='two'}, Student{name='hello6', gender='boy', grade='two'}]
GradeOne Boy list is : [Student{name='hello1', gender='boy', grade='one'}]
GradeTwo Girl list is : [Student{name='hello2', gender='girl', grade='two'}]
GradeOne or girl list is :[Student{name='hello1', gender='boy', grade='one'}, Student{name='hello4', gender='girl', grade='one'}, Student{name='hello5', gender='girl', grade='one'}, Student{name='hello2', gender='girl', grade='two'}]

keil5编程前的工程文件配置,芯片型号支持包配置,用户文件配置,启动文件配置和库函数配置-江科大stm32学习 第一天 1.start文件夹中头文件需要配置路径path,另外user和library也需要,都是同样的操作。如图,在option界面c/c++中,在倒数第二空行的三个点处添加。2.需要设置一个宏,作用是使主函数头文件包含标准库函数,操作如图:复制头文件中8296行的字符串,在option界面的c/c++中第一行define粘贴这个字符串即可。一、首先,下载芯片支持包,选择你自己的器件型号,不懂的可以看我这篇选器件的方法(默认已经注册好用户)点击编译按钮,编译成功后即可在user文件夹里添加main.c正常使用。 阅读详情

相关推荐

超详细的YOLOv8安装与测试指南:让计算机视觉任务变得简单

python3+、Anaconda3或Miniconda3 Ultralytics提供了多种安装方法,包括pip、conda和Docker。通过pip包安装最新稳定版的YOLOv8,或者克隆Ultralytics GitHub仓库以获取最新版本。Docker可用于在隔离容器中执行包,避免本地安装。 最简单直接的方式就是直接使用pip方法直接安装。 也可以直接从GitHub仓库安装包。如果你想要最新的开发版本,这可能会很有用。确保你的系统上安装了Git命令行工具

CDBmax的博客 1万+

设计模式结构型——过滤器模式

过滤器模式(Filter Pattern)又称标准模式(Criteria Pattern)是一种设计模式,属于结构型模式。这种模式允许开发人员使用不同的标准来过滤一组对象,通过运算逻辑以解耦的方式将它们连接起来。过滤器模式可结合多个标准来获得单一标准。说白了,就是按条件筛选一组对象出来。

tszc95的博客 3075

【tips】在PyCharm中安装opencv图文版详细教程

pip如下图所示,左边的蓝色图标就是终端。点开终端后,键入命令,按下回车后就开始下载了。如果你更喜欢图形化操作,可以在 PyCharm 中直接安装:。点击右上角的 +按钮(添加包)。搜索或,点击。

zhousanguhe的博客 6740

每天一个设计模式之 -- 过滤器模式

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

chuangmoliao4054的博客 503

STM32F407 BootLoader实战:从零搭建到OTA升级(附完整源码)

本文详细介绍了为STM32F407微控制器从零搭建BootLoader并实现稳定OTA升级的完整实战指南。内容涵盖Flash分区规划、链接脚本配置、核心跳转逻辑、中断向量表重定向、可靠的升级流程设计,并深入探讨了双备份与回滚机制以提升工业级可靠性。文章提供了可直接使用的代码框架,并分享了关键调试技巧,帮助开发者快速掌握STM32远程固件更新技术。

weixin_29192211的博客 439

CANdelaStudio实战:如何用19服务快速编辑DTC快照数据(附Excel模板)

本文详细介绍了在CANdelaStudio中利用19服务高效编辑DTC快照数据的进阶技巧。通过导出DTC池至Excel进行批量编辑,结合‘Copy from DTC Pool’功能实现配置复用,并分享了构建自定义Excel模板与字段映射的实用方法,帮助工程师将繁琐的手动配置转化为工程化的批量处理,大幅提升诊断数据库开发效率。

weixin_29230773的博客 190

设计模式之过滤器模式

过滤器模式就是对一组对象按照一定标准进行过滤以满足特定需求,其属于结构型设计模式。

勤于笔记,成于点滴。 1901

Parrot OS最新安装教程

Parrot OS和Kali Linux一样是一个基于 Debian 的免费开源 Linux 发行版,适合安全专家、开发人员、以及关心隐私的人。相较于Kali,Parrot OS属于轻量级,对于硬件的要求无需很高,目前版本已更新到6.3。通过按照本教程的方法,能够成功安装Parrot OS。

🦸💻冰草花生酱提醒您“请记得检查所有电子设备的最后登录时间哦⏰🔍” 4410

java设计模式之过滤器设计模式的前世今生

过滤器模式可以在不改变目标对象的情况下,多次筛选它的数据,实现更加灵活的筛选方式。4. 提高系统的性能:使用过滤器设计模式可以避免重复计算,从而提高系统的性能。3. 过滤器链(FilterChain):将多个过滤器组合成一个过滤器链,用于逐步筛选对象或数据,并管理过滤器的调用顺序。过滤器设计模式提供了一种灵活的方式来处理对象集合,可以增加代码的可重用性,降低代码的耦合度,使代码更易于维护和扩展。总之,使用过滤器设计模式可以提高代码的可重用性、可读性、可维护性,降低代码的耦合度,提高系统的性能和清晰度。

luoluoal的博客 731

极化码理论及算法研究4-巴氏参数、GA算法以及matlab仿真

目录 (如要找其他内容,欢迎访问我的主页寻找) #前言 #极化码概述 #极化码定义 #极化码编码 #极化码译码 #5G标准中极化码的编译码概述 #5G标准中极化码的编码 #5G标准中极化码的译码 #总结 极化码编码 ...

1万+

CKS-CN考试之路----02

其实我们根据题目也可以知道秘钥是叫clever-cactus。稍作等待后,确认pod的状态,如果是1/1基本就没问题了。这步不一定做.目的是确定秘钥的名字。

Q先生 654

第六十节 Java设计模式 - 过滤器/标准模式

Java设计模式 - 过滤器/标准模式

2301_78772942的博客 754

TEA-Tiny Encryption算法在FPGA的实现

在FPGA原型中,我们定义了一个TEA_FPGA模块,该模块包含一个输入数据端口(plain)、一个输入密钥端口(key)和一个输出数据端口(cipher)。在模块中,我们通过32轮的循环处理来实现TEA算法的加密过程,并将最终结果存储在cipher变量中。由于FPGA硬件的高速性能,这种基于HDL的TEA算法实现可以在短时间内完成大量的数据加密处理,从而提高加密效率和性能。总之,在FPGA中实现TEA算法可以大大提高加密效率和性能,通过使用硬件描述语言HDL来实现可以更高效、更快速地完成数据加密操作。

BitSlinger的博客 272

设计模式详解-过滤器模式(标准模式)

过滤器模式是一种结构型设计模式,它允许我们使用不同的条件从数据集合中筛选出满足特定条件的数据子集。它将筛选条件和数据集合分离,使得二者可以独立变化而互不影响。过滤器模式是一种简单而强大的软件设计模式,它可以帮助我们灵活地筛选数据,并将过滤条件与数据集合解耦。通过本篇博客的学习,读者可以了解到过滤器模式的基本概念、应用场景和实现方式,并通过实例演示掌握其具体使用方法。希望本文对您深入理解过滤器模式有所帮助,并能在实际开发中灵活运用。

qq_18884633的博客 701

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

设计模式代码

参考地址:https://www.runoob.com/design-pattern/design-pattern-tutorial.html。

Mr. Ding的小博客 688

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

设计模式结构型模式之过滤器模式

过滤器模式 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。 实现 我们将创建一个 Person 对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。Cri...

u011675274的专栏 184

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

过滤器模式(Filter Pattern)-PHP实现

过滤器模式(Filter Pattern)/标准模式(Criteria Pattern) 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。 这是对符合条件的对象进行过滤,不是简单的对传递的参数进行判断。 示例代码: <?php class User{ private $gender='male

patriot_28的博客 209

过滤器模式(Filter)

一、定义 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。 二、案例 创建一个类,在该类上应用标准: package com.wuychn.filter; public clas...

wuychn 393

设计模式之过滤器模式(php实现)

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

diaoliu7156的博客 254

过滤器java面试_面试官问Java过滤器模式不会怎么办?这篇文章来教你!

介绍过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。实现我们将创建一个 Person 对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。CriteriaP...

weixin_30297493的博客 67

过滤器模式

过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。我们将创建一个 Person 对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。CriteriaPatternDemo,我们的演示类使用 Criteria 对象,基于各种标准和它们的结合来过滤 Person 对象的列表。为标准(Criteria)创建一个接口。

目目沐沐 566

Java 结构型设计模式一口气讲完!o(*^@^*)o

我们在现实生活中使用适配器很多。例如,我们使用存储卡适配器连接存储卡和计算机,因为计算机仅支持一种类型的存储卡,并且我们的卡与计算机不兼容。适配器是两个不兼容实体之间的转换器。适配器模式是一种结构模式。在Java设计模式中,适配器模式作为两个不兼容接口之间的桥梁。通过使用适配器模式,我们可以统一两个不兼容的接口。

爱编程的鱼的博客 823

Java与设计模式(十七)结构型--过滤器模式

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

keep_trying的专栏 296

【结构型模式】过滤器模式

过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。 实现 我们将创建一个 Person 对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。CriteriaPatternDemo,我们的演示类使用 Criteria 对象,基于各种标准和它们的结合来过滤 Person 对

... 175
上一篇: 设计模式--代理模式
下一篇: 设计模式--责任链模式
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值