过滤器模式是指通过构造一系列不同的标准实现类,通过这些标准实现类把目标对象(通常是多个)按照对应的标准进行过滤,从而得到想要的对象(或对象组)。这些标准实现类也可以构造成多个标准组合的形式(多个标准的“与”、“或”、“非”结合)。
下例中以过滤人员对象为例,人员Person类具有name、gender、maritalStatus等3个属性,在主函数中构造一组人员,使各人员具有不同的属性,然后通过过滤器对这些人员进行过滤。类图如下:
Person类:
package filter;
public class Person {
private String name;
private String gender;
private String maritalStatus;
public Person(String name, String gender, String maritalStatus) {
this.name=name;
this.gender=gender;
this.maritalStatus=maritalStatus;
}
public String getName() {
return name;
}
public String getGender() {
return gender;
}
public String getMaritalStatus() {
return maritalStatus;
}
public String getInformation() {
return name+":"+gender+","+maritalStatus;
}
}
Criteria接口类:
package filter;
import java.util.List;
public interface Criteria {
List < Person > meetCriteria(List < Person > persons);
}
CriteriaFemale实现类:
package filter;
import java.util.ArrayList;
import java.util.List;
/*
* 过滤得到女性人员
*/
public class CriteriaFemale implements Criteria{
@Override
public List< Person > meetCriteria(List< Person > persons) {
List < Person > femalePerson = new ArrayList < Person >();
for(Person person: persons) {
if(person.getGender().equals("女")) {
femalePerson.add(person);
}
}
return femalePerson;
}
}
CriteriaMale实现类:
package filter;
import java.util.ArrayList;
import java.util.List;
/*
* 过滤得到男性人员
*/
public class CriteriaMale implements Criteria{
@Override
public List< Person > meetCriteria(List< Person > persons) {
List < Person > malePersons= new ArrayList < Person > ();
for(Person person: persons) {
if(person.getGender().equals("男")) {
malePersons.add(person);
}
}
return malePersons;
}
}
CriteriaSingle实现类:
package filter;
import java.util.ArrayList;
import java.util.List;
/*
* 过滤得到单身人员
*/
public class CriteriaSingle implements Criteria{
@Override
public List< Person > meetCriteria(List< Person > persons) {
List < Person > singlePersons = new ArrayList < Person > ();
for(Person person: persons) {
if(person.getMaritalStatus().equals("单身")) {
singlePersons.add(person);
}
}
return singlePersons;
}
}
Andcriteria实现类:
package filter;
import java.util.List;
public class AndCriteria implements Criteria{
private Criteria criteria;
private Criteria otherCriteria;
public AndCriteria(Criteria criteria,Criteria otherCriteria) {
this.criteria=criteria;
this.otherCriteria=otherCriteria;
}
@Override
public List< Person > meetCriteria(List< Person > persons) {
List < Person > firstCriteriaPersons = criteria.meetCriteria(persons);
return otherCriteria.meetCriteria(firstCriteriaPersons);
}
}
OrCriteria实现类:
package filter;
import java.util.List;
public class OrCriteria implements Criteria{
private Criteria criteria;
private Criteria otherCriteria;
public OrCriteria(Criteria criteria, Criteria otherCriteria) {
this.criteria=criteria;
this.otherCriteria=otherCriteria;
}
@Override
public List< Person > meetCriteria(List< Person > persons) {
List< Person > firstCriteriaPersons = criteria.meetCriteria(persons);
List< Person > ohterCriteriaPersons = otherCriteria.meetCriteria(persons);
for(Person person: ohterCriteriaPersons) {
if(!firstCriteriaPersons.contains(person)) {
firstCriteriaPersons.add(person);
}
}
return firstCriteriaPersons;
}
}
主函数调用类:
package main;
import java.util.ArrayList;
import java.util.List;
import filter.*;
public class FilterPattern {
public static void main(String[] args) {
List < Person > persons=new ArrayList < Person > ();
persons.add(new Person("张三","男","单身"));
persons.add(new Person("李四","女","已婚"));
persons.add(new Person("王五","女","单身"));
persons.add(new Person("赵六","男","已婚"));
persons.add(new Person("张七","女","单身"));
persons.add(new Person("李八","男","单身"));
persons.add(new Person("王九","女","单身"));
//过滤得到男性
Criteria male= new CriteriaMale();
List < Person > malePersons=male.meetCriteria(persons);
System.out.println("全部男性:");
for(Person person: malePersons) {
System.out.println(person.getInformation());
}
//过滤得到女性
Criteria female = new CriteriaFemale();
List < Person > femalePersons=female.meetCriteria(persons);
System.out.println("全部女性:");
for(Person person: femalePersons) {
System.out.println(person.getInformation());
}
//过滤得到单身人士
Criteria single = new CriteriaSingle();
List < Person > singlePersons=single.meetCriteria(persons);
System.out.println("全部单身:");
for(Person person: singlePersons) {
System.out.println(person.getInformation());
}
//过滤得到单身女性
Criteria femaleSingle = new AndCriteria(female,single);
List < Person > femaleSinglePersons=femaleSingle.meetCriteria(persons);
System.out.println("全部单身女性:");
for(Person person: femaleSinglePersons) {
System.out.println(person.getInformation());
}
//过滤得到男性或单身人士
Criteria maleOrSingle = new OrCriteria(male,single);
List < Person > maleOrSinglePersons=maleOrSingle.meetCriteria(persons);
System.out.println("全部单身或男性:");
for(Person person: maleOrSinglePersons) {
System.out.println(person.getInformation());
}
}
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
过滤器
+关注
关注
1文章
427浏览量
19537
发布评论请先 登录
相关推荐
一文理解布隆过滤器和布谷鸟过滤器
作者:京东保险 王奕龙 最近在大促中使用到了布隆过滤器,所以本次借着机会整理下相关内容,并了解了布谷鸟过滤器,希望对后续学习的同学有启发~ 布隆过滤器 布隆过滤器是 概率性数据结构 ,
CAN过滤器的配置
CAN过滤器的配置(f103 hal1.8 系列)can的过滤器的配置是对can接收到的报文进行过滤的配置,在STM32芯片中,可以对can的报文进行过滤,从而省略cpu的处理过程。c
发表于 08-19 06:11
CN过滤器原理
CN过滤器原理
CN过滤器采用整体玻璃钢,耐酸耐碱,一般耐温65℃。内部装有约半米高的悬浮介质层。悬浮过滤介质为1-2mm小球,采用高分子材料加工,密度大约
发表于 02-25 15:00
•26次下载
过滤器的作用
本视频主要详细介绍了过滤器的作用,分别是滤速高、过滤效果好;强度高、耐腐蚀;静电作用;过滤物质;拦截;其次介绍了水龙头过滤器的作用,最后介绍了活性炭
解密高效空气过滤器的性能及要求
高效过滤器生产厂商 三河市科丰电气有限公司高效过滤器。三河市科丰电气有限公司致力于为通信行业、暖通行业、节能行业,过滤行业等行业并提供专业配套产品和服务。高效过滤器产品具有
发表于 03-19 14:56
•2017次阅读
STM32 CAN应用-过滤器设置
在使用STM32的CAN控制器进行数据收发,当用到位屏蔽模式的时候,就要设置过滤器了,这个关系到是否能够接收到想要的数据。下面针对几种不同情况对CAN过滤器(Filter)进行设置。
发表于 02-10 10:00
•3次下载
丝扣Y过滤器
丝扣Y过滤器是Y过滤器的一种,普通滤材是不锈钢或者碳钢,滤芯普通带有不锈钢骨架。 丝扣Y形过滤器有时也叫做·不锈钢内螺纹Y过滤器。 特性: 1.丝扣Y形
丝扣Y过滤器及过滤器测试原理简介
丝扣Y过滤器是Y过滤器的一种,普通滤材是不锈钢或者碳钢,滤芯普通带有不锈钢骨架。 丝扣Y形过滤器有时也叫做·不锈钢内螺纹Y过滤器。 特性: 1.丝扣Y形
发表于 09-05 09:27
•2510次阅读
丝扣Y形过滤器
丝扣Y形过滤器是保送介质管道上不可短少的一种安装,通常装置在减压阀、泄压阀、定水位阀或其它设备的进口端,用来消弭介质中的杂质,以维护阀门及设备的正常运用。 丝扣Y形过滤器有时也叫做·不锈钢内螺纹Y
汉克森过滤器系列介绍
汉克森过滤器 【1】国产品牌滤芯均为我司生产的替代原厂品牌滤芯,其过滤滤材采用德国原装进口HV公司产品,注册商标为“佳洁”牌。本公司涉及的其它品牌均无品牌意义,只是作为产品型号参照和客户选型对照
发表于 03-01 08:53
•1086次阅读
评论