Filter pattern (Filter Pattern) or standard pattern (Criteria Pattern) is a design pattern that allows developers to filter a set of objects using different standards and connect them in a decoupled manner through logical operations. This type of design pattern belongs to structural pattern, which combines multiple standards to obtain a single standard. We will create a Person Object, Criteria Interface and the entity class that implements the interface, to filter Person A list of objects. CriteriaPatternDemo Class usage Criteria Object that is filtered based on various standards and their combination Person A list of objects. Create a class and apply standards to it. Create an interface for the standard (Criteria). Create and implement the Criteria The entity class of the interface. Use different standards (Criteria) and their combination to filter Person A list of objects. Execute the program and output the result: 6.10.1. Realize ¶
6.10.2. Step 1 ¶
Person.java ¶
publicclassPerson{privateStringname;privateStringgender;privateStringmaritalStatus;publicPerson(Stringname,Stringgender,StringmaritalStatus){this.name=name;this.gender=gender;this.maritalStatus=maritalStatus;}publicStringgetName(){returnname;}publicStringgetGender(){returngender;}publicStringgetMaritalStatus(){returnmaritalStatus;}}
6.10.3. Step 2 ¶
Criteria.java ¶
importjava.util.List;publicinterfaceCriteria{publicList<Person>meetCriteria(List<Person>persons);}
6.10.4. Step 3 ¶
CriteriaMale.java ¶
importjava.util.ArrayList;importjava.util.List;publicclassCriteriaMaleimplementsCriteria{@OverridepublicList<Person>meetCriteria(List<Person>persons){List<Person>malePersons=newArrayList<Person>();for(Personperson:persons){if(person.getGender().equalsIgnoreCase("MALE")){malePersons.add(person);}}returnmalePersons;}}
CriteriaFemale.java ¶
importjava.util.ArrayList;importjava.util.List;publicclassCriteriaFemaleimplementsCriteria{@OverridepublicList<Person>meetCriteria(List<Person>persons){List<Person>femalePersons=newArrayList<Person>();for(Personperson:persons){if(person.getGender().equalsIgnoreCase("FEMALE")){femalePersons.add(person);}}returnfemalePersons;}}
CriteriaSingle.java ¶
importjava.util.ArrayList;importjava.util.List;publicclassCriteriaSingleimplementsCriteria{@OverridepublicList<Person>meetCriteria(List<Person>persons){List<Person>singlePersons=newArrayList<Person>();for(Personperson:persons){if(person.getMaritalStatus().equalsIgnoreCase("SINGLE")){singlePersons.add(person);}}returnsinglePersons;}}
AndCriteria.java ¶
importjava.util.List;publicclassAndCriteriaimplementsCriteria{privateCriteriacriteria;privateCriteriaotherCriteria;publicAndCriteria(Criteriacriteria,CriteriaotherCriteria){this.criteria=criteria;this.otherCriteria=otherCriteria;}@OverridepublicList<Person>meetCriteria(List<Person>persons){List<Person>firstCriteriaPersons=criteria.meetCriteria(persons);returnotherCriteria.meetCriteria(firstCriteriaPersons);}}
OrCriteria.java ¶
importjava.util.List;publicclassOrCriteriaimplementsCriteria{privateCriteriacriteria;privateCriteriaotherCriteria;publicOrCriteria(Criteriacriteria,CriteriaotherCriteria){this.criteria=criteria;this.otherCriteria=otherCriteria;}@OverridepublicList<Person>meetCriteria(List<Person>persons){List<Person>firstCriteriaItems=criteria.meetCriteria(persons);List<Person>otherCriteriaItems=otherCriteria.meetCriteria(persons);for(Personperson:otherCriteriaItems){if(!firstCriteriaItems.contains(person)){firstCriteriaItems.add(person);}}returnfirstCriteriaItems;}}
6.10.5. Step 4 ¶
CriteriaPatternDemo.java ¶
importjava.util.ArrayList;importjava.util.List;publicclassCriteriaPatternDemo{publicstaticvoidmain(String[]args){List<Person>persons=newArrayList<Person>();persons.add(newPerson("Robert","Male","Single"));persons.add(newPerson("John","Male","Married"));persons.add(newPerson("Laura","Female","Married"));persons.add(newPerson("Diana","Female","Single"));persons.add(newPerson("Mike","Male","Single"));persons.add(newPerson("Bobby","Male","Single"));Criteriamale=newCriteriaMale();Criteriafemale=newCriteriaFemale();Criteriasingle=newCriteriaSingle();CriteriasingleMale=newAndCriteria(single,male);CriteriasingleOrFemale=newOrCriteria(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));}publicstaticvoidprintPersons(List<Person>persons){for(Personperson:persons){System.out.println("Person
: [ Name :"+person.getName()+", Gender :"+person.getGender()+", Marital
Status :"+person.getMaritalStatus()+"]");}}}
6.10.6. Step 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 ]