Padrão de filtro
modo de filtro (Filter Padrão) ou no modo standard (Padrão Critérios) é um modelo de design que permite aos desenvolvedores usar critérios diferentes para filtrar um conjunto de objetos, através de operações lógicas para desacoplar maneira de conectá-los. Este tipo de padrão de design de um esquema estrutural, que combina vários critérios obter um padrão único.
realização
Vamos criar umobjeto Pessoa,interface de classe de entidade Critérios e implementação da interface para filtrar a lista de objetosPerson.CriteriaPatternDemo, nossas aulas de demonstração usar objetosCritérios,com base em vários critérios e suas combinações para filtrar a lista de objetosPerson.
passo 1
Criar uma classe, sobre a aplicação das normas nesta classe.
Person.java
Public class Person { private String nome; género private String; situação conjugal private String; Pessoa pública (String nome, String género, String situação conjugal) { this.name = nome; this.gender = género; this.maritalStatus = situação conjugal; } Cadeia getName pública () { nome de retornar; } Cadeia getGender pública () { voltar género; } Cadeia getMaritalStatus pública () { retornar situação conjugal; } }
passo 2
Criar uma interface para padrão (Criteria).
Criteria.java
import java.util.List; Critérios de interface pública { Lista pública <Person> meetCriteria (List <Person> pessoas); }
passo 3
Criar classes de entidade realizados interface deCritérios.
CriteriaMale.java
importação java.util.ArrayList; import java.util.List; classe pública CriteriaMale implementa Critérios { @Override Lista pública <Person> meetCriteria (List <Person> pessoas) { List <Person> malePersons = new ArrayList <Person> (); for (Pessoa pessoa: pessoas) { if (person.getGender (). equalsIgnoreCase ( "masculino")) { malePersons.add (pessoa); } } voltar malePersons; } }
CriteriaFemale.java
importação java.util.ArrayList; import java.util.List; classe pública CriteriaFemale implementa Critérios { @Override Lista pública <Person> meetCriteria (List <Person> pessoas) { List <Person> femalePersons = new ArrayList <Person> (); for (Pessoa pessoa: pessoas) { if (person.getGender (). equalsIgnoreCase ( "feminino")) { femalePersons.add (pessoa); } } voltar femalePersons; } }
CriteriaSingle.java
importação java.util.ArrayList; import java.util.List; classe pública CriteriaSingle implementa Critérios { @Override Lista pública <Person> meetCriteria (List <Person> pessoas) { List <Person> singlePersons = new ArrayList <Person> (); for (Pessoa pessoa: pessoas) { if (person.getMaritalStatus (). equalsIgnoreCase ( "SINGLE")) { singlePersons.add (pessoa); } } voltar singlePersons; } }
AndCriteria.java
import java.util.List; classe pública AndCriteria implementa Critérios { critérios Critérios privadas; Critérios privadas otherCriteria; pública AndCriteria (critérios Critérios, Critérios otherCriteria) { this.criteria = critérios; this.otherCriteria = otherCriteria; } @Override Lista pública <Person> meetCriteria (List <Person> pessoas) { List <Pessoa> firstCriteriaPersons = criteria.meetCriteria (pessoas); retornar (otherCriteria.meetCriteria firstCriteriaPersons); } }
OrCriteria.java
import java.util.List; classe pública OrCriteria implementa Critérios { critérios Critérios privadas; Critérios privadas otherCriteria; OrCriteria públicos (critérios Critérios, Critérios otherCriteria) { this.criteria = critérios; this.otherCriteria = otherCriteria; } @Override Lista pública <Person> meetCriteria (List <Person> pessoas) { List <Pessoa> firstCriteriaItems = criteria.meetCriteria (pessoas); List <Pessoa> otherCriteriaItems = otherCriteria.meetCriteria (pessoas); for (Pessoa pessoa: otherCriteriaItems) { if (! firstCriteriaItems.contains (pessoa)) { firstCriteriaItems.add (pessoa); } } voltar firstCriteriaItems; } }
passo 4
Usando critérios diferentes (Critérios) e suas combinações para filtrar a lista de objetosPerson.
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() +" ]"); } } }
passo 5
Verifique saída.
machos: Pessoa: [Nome: Robert, Masculino, Estado Civil: Solteiro] Pessoa: [Nome: John, Sexo: Masculino, Estado Civil: Casado] Pessoa: [Nome: Mike, Masculino, Estado Civil: Solteiro] Pessoa: [Nome: Bobby, Sexo: Masculino, Estado Civil: Solteiro] mulheres: Pessoa: [Nome: Laura, Feminino, Estado Civil: Casado] Pessoa: [Nome: Diana, Feminino, Estado Civil: Solteiro] Os machos solteiros: Pessoa: [Nome: Robert, Masculino, Estado Civil: Solteiro] Pessoa: [Nome: Mike, Masculino, Estado Civil: Solteiro] Pessoa: [Nome: Bobby, Sexo: Masculino, Estado Civil: Solteiro] Individuais ou fêmeas: Pessoa: [Nome: Robert, Masculino, Estado Civil: Solteiro] Pessoa: [Nome: Diana, Feminino, Estado Civil: Solteiro] Pessoa: [Nome: Mike, Masculino, Estado Civil: Solteiro] Pessoa: [Nome: Bobby, Sexo: Masculino, Estado Civil: Solteiro] Pessoa: [Nome: Laura, Feminino, Estado Civil: Casado]