過濾器模式是指通過構造一系列不同的標準實現(xiàn)類,通過這些標準實現(xiàn)類把目標對象(通常是多個)按照對應的標準進行過濾,從而得到想要的對象(或對象組)。這些標準實現(xiàn)類也可以構造成多個標準組合的形式(多個標準的“與”、“或”、“非”結合)。
下例中以過濾人員對象為例,人員Person類具有name、gender、maritalStatus等3個屬性,在主函數(shù)中構造一組人員,使各人員具有不同的屬性,然后通過過濾器對這些人員進行過濾。類圖如下:

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實現(xiàn)類:
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實現(xiàn)類:
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實現(xiàn)類:
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實現(xiàn)類:
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實現(xiàn)類:
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;
}
}
主函數(shù)調(diào)用類:
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());
}
}
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
過濾器
+關注
關注
1文章
444瀏覽量
20904
發(fā)布評論請先 登錄
相關推薦
熱點推薦
一文理解布隆過濾器和布谷鳥過濾器
作者:京東保險 王奕龍 最近在大促中使用到了布隆過濾器,所以本次借著機會整理下相關內(nèi)容,并了解了布谷鳥過濾器,希望對后續(xù)學習的同學有啟發(fā)~ 布隆過濾器 布隆過濾器是 概率性數(shù)據(jù)結構 ,
STM32提供兩種過濾器模式
系列文章目錄文章目錄系列文章目錄前言一、過濾器的作用二、可變的位寬三、屏蔽位模式四、標識符列表模式五、過濾器組位寬和模式的設置六、
發(fā)表于 08-19 07:13
CN過濾器原理
CN過濾器原理
CN過濾器采用整體玻璃鋼,耐酸耐堿,一般耐溫65℃。內(nèi)部裝有約半米高的懸浮介質(zhì)層。懸浮過濾介質(zhì)為1-2mm小球,采用高分子材料加工,密度大約
發(fā)表于 02-25 15:00
?26次下載
過濾器的作用
本視頻主要詳細介紹了過濾器的作用,分別是濾速高、過濾效果好;強度高、耐腐蝕;靜電作用;過濾物質(zhì);攔截;其次介紹了水龍頭過濾器的作用,最后介紹了活性炭
解密高效空氣過濾器的性能及要求
高效過濾器生產(chǎn)廠商 三河市科豐電氣有限公司高效過濾器。三河市科豐電氣有限公司致力于為通信行業(yè)、暖通行業(yè)、節(jié)能行業(yè),過濾行業(yè)等行業(yè)并提供專業(yè)配套產(chǎn)品和服務。高效過濾器產(chǎn)品具有
發(fā)表于 03-19 14:56
?2374次閱讀
STM32 CAN應用-過濾器設置
在使用STM32的CAN控制器進行數(shù)據(jù)收發(fā),當用到位屏蔽模式的時候,就要設置過濾器了,這個關系到是否能夠接收到想要的數(shù)據(jù)。下面針對幾種不同情況對CAN過濾器(Filter)進行設置。
發(fā)表于 02-10 10:00
?4次下載
絲扣Y過濾器
絲扣Y過濾器是Y過濾器的一種,普通濾材是不銹鋼或者碳鋼,濾芯普通帶有不銹鋼骨架。 絲扣Y形過濾器有時也叫做·不銹鋼內(nèi)螺紋Y過濾器。? ? 特性: ? 1.絲扣Y形
絲扣Y過濾器及過濾器測試原理簡介
絲扣Y過濾器是Y過濾器的一種,普通濾材是不銹鋼或者碳鋼,濾芯普通帶有不銹鋼骨架。 絲扣Y形過濾器有時也叫做·不銹鋼內(nèi)螺紋Y過濾器。? 特性: 1.絲扣Y形
發(fā)表于 09-05 09:27
?3111次閱讀
絲扣Y形過濾器
絲扣Y形過濾器是保送介質(zhì)管道上不可短少的一種安裝,通常裝置在減壓閥、泄壓閥、定水位閥或其它設備的進口端,用來消弭介質(zhì)中的雜質(zhì),以維護閥門及設備的正常運用。 絲扣Y形過濾器有時也叫做·不銹鋼內(nèi)螺紋Y
漢克森過濾器系列介紹
漢克森過濾器 【1】國產(chǎn)品牌濾芯均為我司生產(chǎn)的替代原廠品牌濾芯,其過濾濾材采用德國原裝進口HV公司產(chǎn)品,注冊商標為“佳潔”牌。本公司涉及的其它品牌均無品牌意義,只是作為產(chǎn)品型號參照和客戶選型對照
發(fā)表于 03-01 08:53
?1637次閱讀
過濾器模式是指什么?
評論