Filtre Motif
Mode de filtre (Filter Pattern) ou en mode standard (Critères de Pattern) est un modèle de conception qui permet aux développeurs d'utiliser différents critères pour filtrer un ensemble d'objets, par le biais des opérations logiques de découpler façon de les connecter. Ce type de modèle de conception d'un schéma structurel, qui combine plusieurs critères obtenir une norme unique.
réalisation
Nous allons créer unobjet Person,interface de classe Critères d'entité et la mise en œuvre de l'interface pour filtrer la liste des objetsPerson.CriteriaPatternDemo, nos classes de démonstration utiliser des objetsde critères,en fonction de divers critères et des combinaisons de ceux - ci pour filtrer la liste des objetsPerson.
Etape 1
Créer une classe, sur l'application des normes dans cette classe.
Person.java
public class Person { private String nom; le genre de chaîne privée; maritalStatus private String; Personne publique (String name, genre String, String maritalStatus) { this.name = nom; this.gender = sexe; this.maritalStatus = maritalStatus; } public String getName () { Nom de retour; } public String getGender () { retour entre les sexes; } public String getMaritalStatus () { retour maritalStatus; } }
Etape 2
Créer une interface pour standard (critères).
Criteria.java
import java.util.List; public interface Critères { Liste publique <Person> meetCriteria (Liste <Person> personnes); }
Etape 3
Créer des classes d'entités réalisées interfaceCritères.
CriteriaMale.java
import java.util.ArrayList; import java.util.List; CriteriaMale public class implémente Critères { @Override Liste publique <Person> meetCriteria (Liste <Person> personnes) { Liste <Person> malePersons = new ArrayList <Person> (); pour (personne personne: personnes) { if (person.getGender (). equalsIgnoreCase ( "MALE")) { malePersons.add (personne); } } retour malePersons; } }
CriteriaFemale.java
import java.util.ArrayList; import java.util.List; CriteriaFemale public class implémente Critères { @Override Liste publique <Person> meetCriteria (Liste <Person> personnes) { Liste <Person> femalePersons = new ArrayList <Person> (); pour (personne personne: personnes) { if (person.getGender (). equalsIgnoreCase ( "FEMININ")) { femalePersons.add (personne); } } retour femalePersons; } }
CriteriaSingle.java
import java.util.ArrayList; import java.util.List; CriteriaSingle public class implémente Critères { @Override Liste publique <Person> meetCriteria (Liste <Person> personnes) { Liste <Person> singlePersons = new ArrayList <Person> (); pour (personne personne: personnes) { if (person.getMaritalStatus (). equalsIgnoreCase ( "SINGLE")) { singlePersons.add (personne); } } retour singlePersons; } }
AndCriteria.java
import java.util.List; public class AndCriteria implémente Critères { critères de critères privés; Critères privés otherCriteria; publique AndCriteria (critères de critères, critères otherCriteria) { this.criteria = critères; this.otherCriteria = otherCriteria; } @Override Liste publique <Person> meetCriteria (Liste <Person> personnes) { Liste <Person> firstCriteriaPersons = criteria.meetCriteria (personnes); retour otherCriteria.meetCriteria (firstCriteriaPersons); } }
OrCriteria.java
import java.util.List; public class OrCriteria implémente Critères { critères de critères privés; Critères privés otherCriteria; OrCriteria publics (critères Critères, critères otherCriteria) { this.criteria = critères; this.otherCriteria = otherCriteria; } @Override Liste publique <Person> meetCriteria (Liste <Person> personnes) { Liste <Person> firstCriteriaItems = criteria.meetCriteria (personnes); Liste <Person> otherCriteriaItems = otherCriteria.meetCriteria (personnes); pour (Person person: otherCriteriaItems) { if (! firstCriteriaItems.contains (personne)) { firstCriteriaItems.add (personne); } } retour firstCriteriaItems; } }
Etape 4
En utilisant différents critères (critères) et des combinaisons de ceux - ci pour filtrer la liste des objetsPerson.
CriteriaPatternDemo.java
import java.util.ArrayList; import java.util.List; public class CriteriaPatternDemo { public static void main(String[] args) { List<Person> persons = new ArrayList<Person>(); 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<Person> persons){ for (Person person : persons) { System.out.println("Person : [ Name : " + person.getName() +", Gender : " + person.getGender() +", Marital Status : " + person.getMaritalStatus() +" ]"); } } }
Etape 5
Vérifiez la sortie.
Hommes: Personne: [Nom: Robert, Sexe: Homme, Etat civil: Célibataire] Personne: [Nom: John, Sexe: Homme, Etat civil: Marié] Personne: [Nom: Mike, Sexe: Homme, Etat civil: Célibataire] Personne: [Nom: Bobby, Sexe: Homme, Etat civil: Célibataire] Femmes: Personne: [Nom: Laura, Sexe: Femme, État civil: Marié] Personne: [Nom: Diana, Sexe: Femme, Célibataire] Hommes simples: Personne: [Nom: Robert, Sexe: Homme, Etat civil: Célibataire] Personne: [Nom: Mike, Sexe: Homme, Etat civil: Célibataire] Personne: [Nom: Bobby, Sexe: Homme, Etat civil: Célibataire] Simple ou Femmes: Personne: [Nom: Robert, Sexe: Homme, Etat civil: Célibataire] Personne: [Nom: Diana, Sexe: Femme, Célibataire] Personne: [Nom: Mike, Sexe: Homme, Etat civil: Célibataire] Personne: [Nom: Bobby, Sexe: Homme, Etat civil: Célibataire] Personne: [Nom: Laura, Sexe: Femme, État civil: Marié]