溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java過濾器模式怎么實(shí)現(xiàn)

發(fā)布時(shí)間:2022-01-26 15:20:09 來源:億速云 閱讀:337 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“Java過濾器模式怎么實(shí)現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Java過濾器模式怎么實(shí)現(xiàn)”吧!

過濾器模式(Filter Pattern)或標(biāo)準(zhǔn)模式(Criteria Pattern)是一種設(shè)計(jì)模式,這種模式允許開發(fā)人員使用不同的標(biāo)準(zhǔn)來過濾一組對(duì)象,通過邏輯運(yùn)算以解耦的方式把它們連接起來。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它結(jié)合多個(gè)標(biāo)準(zhǔn)來獲得單一標(biāo)準(zhǔn)。

Java過濾器模式怎么實(shí)現(xiàn)

實(shí)現(xiàn)

我們將創(chuàng)建一個(gè) Person 對(duì)象、Criteria 接口和實(shí)現(xiàn)了該接口的實(shí)體類,來過濾 Person 對(duì)象的列表。CriteriaPatternDemo,我們的演示類使用 Criteria 對(duì)象,基于各種標(biāo)準(zhǔn)和它們的結(jié)合來過濾 Person 對(duì)象的列表。 Java過濾器模式怎么實(shí)現(xiàn)

步驟 1

創(chuàng)建一個(gè)類,在該類上應(yīng)用標(biāo)準(zhǔn)。

Person.java
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;
  }  
}

步驟 2

為標(biāo)準(zhǔn)(Criteria)創(chuàng)建一個(gè)接口。

Criteria.java
import java.util.List;

public interface Criteria {
  public List meetCriteria(List persons);
}

步驟 3

創(chuàng)建實(shí)現(xiàn)了 Criteria 接口的實(shí)體類。

CriteriaMale.java
import java.util.ArrayList;
import java.util.List;

public class CriteriaMale implements Criteria {

  @Override
  public List meetCriteria(List persons) {
     List malePersons = new ArrayList();
     for (Person person : persons) {
        if(person.getGender().equalsIgnoreCase("MALE")){
           malePersons.add(person);
        }
     }
     return malePersons;
  }
}
CriteriaFemale.java
import java.util.ArrayList;
import java.util.List;

public class CriteriaFemale implements Criteria {

  @Override
  public List meetCriteria(List persons) {
     List femalePersons = new ArrayList();
     for (Person person : persons) {
        if(person.getGender().equalsIgnoreCase("FEMALE")){
           femalePersons.add(person);
        }
     }
     return femalePersons;
  }
}
CriteriaSingle.java
import java.util.ArrayList;
import java.util.List;

public class CriteriaSingle implements Criteria {

  @Override
  public List meetCriteria(List persons) {
     List singlePersons = new ArrayList();
     for (Person person : persons) {
        if(person.getMaritalStatus().equalsIgnoreCase("SINGLE")){
           singlePersons.add(person);
        }
     }
     return singlePersons;
  }
}
AndCriteria.java
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 meetCriteria(List persons) {
     List firstCriteriaPersons = criteria.meetCriteria(persons);    
     return otherCriteria.meetCriteria(firstCriteriaPersons);
  }
}
OrCriteria.java
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 meetCriteria(List persons) {
     List firstCriteriaItems = criteria.meetCriteria(persons);
     List otherCriteriaItems = otherCriteria.meetCriteria(persons);

     for (Person person : otherCriteriaItems) {
        if(!firstCriteriaItems.contains(person)){
          firstCriteriaItems.add(person);
        }
     }  
     return firstCriteriaItems;
  }
}

步驟4

使用不同的標(biāo)準(zhǔn)(Criteria)和它們的結(jié)合來過濾 Person 對(duì)象的列表。

CriteriaPatternDemo.java
import java.util.ArrayList;
import java.util.List;

public class CriteriaPatternDemo {
  public static void main(String[] args) {
     List persons = new ArrayList();

     persons.add(new Person("Robert","Male", "Single"));
     persons.add(new Person("John","Male", "Married"));
     persons.add(new Person("Laura","Female", "Married"));
     persons.add(new Person("Diana","Female", "Single"));
     persons.add(new Person("Mike","Male", "Single"));
     persons.add(new Person("Bobby","Male", "Single"));

     Criteria male = new CriteriaMale();
     Criteria female = new CriteriaFemale();
     Criteria single = new CriteriaSingle();
     Criteria singleMale = new AndCriteria(single, male);
     Criteria singleOrFemale = new OrCriteria(single, female);

     System.out.println("Males: ");
     printPersons(male.meetCriteria(persons));

     System.out.println("\nFemales: ");
     printPersons(female.meetCriteria(persons));

     System.out.println("\nSingle Males: ");
     printPersons(singleMale.meetCriteria(persons));

     System.out.println("\nSingle Or Females: ");
     printPersons(singleOrFemale.meetCriteria(persons));
  }

  public static void printPersons(List persons){
     for (Person person : persons) {
        System.out.println("Person : [ Name : " + person.getName()
           +", Gender : " + person.getGender()
           +", Marital Status : " + person.getMaritalStatus()
           +" ]");
     }
  }      
}

步驟 5

執(zhí)行程序,輸出結(jié)果:

Males:
Person : [ Name : Robert, Gender : Male, Marital Status : Single ]
Person : [ Name : John, Gender : Male, Marital Status : Married ]
Person : [ Name : Mike, Gender : Male, Marital Status : Single ]
Person : [ Name : Bobby, Gender : Male, Marital Status : Single ]

Females:
Person : [ Name : Laura, Gender : Female, Marital Status : Married ]
Person : [ Name : Diana, Gender : Female, Marital Status : Single ]

Single Males:
Person : [ Name : Robert, Gender : Male, Marital Status : Single ]
Person : [ Name : Mike, Gender : Male, Marital Status : Single ]
Person : [ Name : Bobby, Gender : Male, Marital Status : Single ]

Single Or Females:
Person : [ Name : Robert, Gender : Male, Marital Status : Single ]
Person : [ Name : Diana, Gender : Female, Marital Status : Single ]
Person : [ Name : Mike, Gender : Male, Marital Status : Single ]
Person : [ Name : Bobby, Gender : Male, Marital Status : Single ]
Person : [ Name : Laura, Gender : Female, Marital Status : Married ]

到此,相信大家對(duì)“Java過濾器模式怎么實(shí)現(xiàn)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI