过滤器模式是指通过构造一系列不同的标准实现类,通过这些标准实现类把目标对象(通常是多个)按照对应的标准进行过滤,从而得到想要的对象(或对象组)。这些标准实现类也可以构造成多个标准组合的形式(多个标准的“与”、“或”、“非”结合)。
下例中以过滤人员对象为例,人员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文章
407浏览量
18999
发布评论请先 登录
相关推荐
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次下载
使用Mipmap的2个优点分析
Mipmap是纹理图像的较小的预滤波变体,表示纹理的不同细节层次(LOD)。通过使用mipmap的缩小过滤器模式,Graphics Core可以设置为自动计算哪个LOD最接近将mipmap的纹理元素映射到渲染目标中的像素,并使用正确的mipmap 进行纹理化。
过滤器的作用
本视频主要详细介绍了过滤器的作用,分别是滤速高、过滤效果好;强度高、耐腐蚀;静电作用;过滤物质;拦截;其次介绍了水龙头过滤器的作用,最后介绍了活性炭
丝扣Y过滤器
丝扣Y过滤器是Y过滤器的一种,普通滤材是不锈钢或者碳钢,滤芯普通带有不锈钢骨架。 丝扣Y形过滤器有时也叫做·不锈钢内螺纹Y过滤器。 特性: 1.丝扣Y形
丝扣Y过滤器及过滤器测试原理简介
丝扣Y过滤器是Y过滤器的一种,普通滤材是不锈钢或者碳钢,滤芯普通带有不锈钢骨架。 丝扣Y形过滤器有时也叫做·不锈钢内螺纹Y过滤器。 特性: 1.丝扣Y形
发表于 09-05 09:27
•2121次阅读
丝扣Y形过滤器
丝扣Y形过滤器是保送介质管道上不可短少的一种安装,通常装置在减压阀、泄压阀、定水位阀或其它设备的进口端,用来消弭介质中的杂质,以维护阀门及设备的正常运用。 丝扣Y形过滤器有时也叫做·不锈钢内螺纹
法兰Y型过滤器
法兰Y型过滤器是除去液体中少量固体颗粒的小型设备,可维护设备的正常工作,当流体进入置有 规格滤网的滤筒后,其杂质被阻挠,而清洁的滤液则由过滤器出口排出,当需求清洗时,只需将可拆卸的滤筒取出,处置
Y型过滤器
Y型过滤器是保送介质的管道系统不可短少的一种过滤安装,Y型过滤器通常装置在减压阀、泄压阀、定水位阀或其它设备的进口端,用来 介质中的杂质,以维护阀门及设备的正常运用。Y型过滤用具有
发表于 10-25 15:32
•1906次阅读
LabVIEW统一查询工具包 过滤器模式Por的介绍
2、C#里面有统一查询语言(LINQ),里面包含数据查询、集合查询、以及排序,这篇文章也来开发一个LabVIEW的统一查询工具包,实现以上功能。
评论