温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java中过滤器模式有什么用

发布时间:2021-10-15 13:49:47 来源:亿速云 阅读:514 作者:小新 栏目:编程语言

这篇文章主要介绍了Java中过滤器模式有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。


实现

我们将创建一个 Person 对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。CriteriaPatternDemo,我们的演示类使用 Criteria 对象,基于各种标准和它们的结合来过滤 Person 对象的列表。
Java中过滤器模式有什么用

步骤 1

创建一个类,在该类上应用标准。

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

为标准(Criteria)创建一个接口。

Criteria.java import java.util.List;   public interface Criteria {    public ListmeetCriteria(Listpersons); }

步骤 3

创建实现了 Criteria 接口的实体类。

CriteriaMale.java import java.util.ArrayList; import java.util.List;   public class CriteriaMale implements Criteria {      @Override    public ListmeetCriteria(Listpersons) {       ListmalePersons = 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 ListmeetCriteria(Listpersons) {       ListfemalePersons = 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 ListmeetCriteria(Listpersons) {       ListsinglePersons = 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 ListmeetCriteria(Listpersons) {       ListfirstCriteriaPersons = 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 ListmeetCriteria(Listpersons) {       ListfirstCriteriaItems = criteria.meetCriteria(persons);       ListotherCriteriaItems = otherCriteria.meetCriteria(persons);         for (Person person : otherCriteriaItems) {          if(!firstCriteriaItems.contains(person)){            firstCriteriaItems.add(person);          }       }         return firstCriteriaItems;    } }

步骤4

使用不同的标准(Criteria)和它们的结合来过滤 Person 对象的列表。

CriteriaPatternDemo.java import java.util.ArrayList;  import java.util.List;   public class CriteriaPatternDemo {    public static void main(String[] args) {       Listpersons = 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(Listpersons){       for (Person person : persons) {          System.out.println("Person : [ Name : " + person.getName()              +", Gender : " + person.getGender()              +", Marital Status : " + person.getMaritalStatus()             +" ]");       }    }       }

步骤 5

执行程序,输出结果:

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 ]

感谢你能够认真阅读完这篇文章,希望小编分享的“Java中过滤器模式有什么用”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI