6.10. Filter mode

发布时间 : 2025-10-25 12:24:48 UTC      

Page Views: 17 views

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.

6.10.1. Realize

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.

过滤器模式的 UML 图

6.10.2. Step 1

Create a class and apply standards to it.

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

Create an interface for the standard (Criteria).

Criteria.java

importjava.util.List;publicinterfaceCriteria{publicList<Person>meetCriteria(List<Person>persons);}

6.10.4. Step 3

Create and implement the Criteria The entity class of the interface.

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

Use different standards (Criteria) and their combination to filter Person A list of objects.

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

Execute the program and output the result:

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 ]
Principles, Technologies, and Methods of Geographic Information Systems  102

In recent years, Geographic Information Systems (GIS) have undergone rapid development in both theoretical and practical dimensions. GIS has been widely applied for modeling and decision-making support across various fields such as urban management, regional planning, and environmental remediation, establishing geographic information as a vital component of the information era. The introduction of the “Digital Earth” concept has further accelerated the advancement of GIS, which serves as its technical foundation. Concurrently, scholars have been dedicated to theoretical research in areas like spatial cognition, spatial data uncertainty, and the formalization of spatial relationships. This reflects the dual nature of GIS as both an applied technology and an academic discipline, with the two aspects forming a mutually reinforcing cycle of progress.