patrón del filtro
Modo de filtro (Patrón del filtro) o en el modo estándar (patrón Criterios) es un modelo de diseño que permite a los desarrolladores utilizar diferentes criterios para filtrar un conjunto de objetos, a través de operaciones lógicas para desacoplar forma de conectarlos. Este tipo de patrón de diseño de un esquema estructural, que combina un criterio obtener un único estándar.
realización
Vamos a crear unobjeto Person,interfaz de clase Criterios entidad y la implementación de la interfaz para filtrar la lista de objetosPersona.CriteriaPatternDemo, nuestras clases de demostración utilizar objetoscriterios,basados en varios criterios y combinaciones de los mismos para filtrar la lista de objetosPersona.
Paso 1
Crear una clase, en la aplicación de las normas en esta clase.
Person.java
Public class Persona { private String nombre; Cadena de género privada; maritalStatus cadena privada; Persona pública (String nombre, cadena de género, Cadena maritalStatus) { this.name = nombre; this.gender = género; this.maritalStatus = maritalStatus; } Public String getName () { Nombre del retorno; } Cadena getGender pública () { género regresar; } Cadena getMaritalStatus pública () { volver maritalStatus; } }
Paso 2
Crear una interfaz para estándar (criterios).
Criteria.java
java.util.List importación; Criterios de interfaz pública { Lista pública <persona> meetCriteria (List <persona> personas); }
paso 3
Crear clases de entidad realizados interfaz deCriterios.
CriteriaMale.java
java.util.ArrayList importación; java.util.List importación; CriteriaMale clase pública implementa Criterios { @ Override Lista pública <persona> meetCriteria (List <persona> personas) { Lista <persona> malePersons = new ArrayList <persona> (); de (persona a persona: personas) { si (person.getGender (). equalsIgnoreCase ( "macho")) { malePersons.add (persona); } } malePersons regresar; } }
CriteriaFemale.java
java.util.ArrayList importación; java.util.List importación; CriteriaFemale clase pública implementa Criterios { @ Override Lista pública <persona> meetCriteria (List <persona> personas) { Lista <persona> femalePersons = new ArrayList <persona> (); de (persona a persona: personas) { si (person.getGender (). equalsIgnoreCase ( "hembra")) { femalePersons.add (persona); } } femalePersons regresar; } }
CriteriaSingle.java
java.util.ArrayList importación; java.util.List importación; CriteriaSingle clase pública implementa Criterios { @ Override Lista pública <persona> meetCriteria (List <persona> personas) { Lista <persona> singlePersons = new ArrayList <persona> (); de (persona a persona: personas) { si (person.getMaritalStatus (). equalsIgnoreCase ( "único")) { singlePersons.add (persona); } } singlePersons regresar; } }
AndCriteria.java
java.util.List importación; clase pública implementa AndCriteria Criterios { Criterios de criterios privados; Criterios privadas otherCriteria; AndCriteria pública (criterios de Criteria, Criteria otherCriteria) { this.criteria = criterios; this.otherCriteria = otherCriteria; } @ Override Lista pública <persona> meetCriteria (List <persona> personas) { Lista <persona> firstCriteriaPersons = criteria.meetCriteria (personas); volver otherCriteria.meetCriteria (firstCriteriaPersons); } }
OrCriteria.java
java.util.List importación; clase pública implementa OrCriteria Criterios { Criterios de criterios privados; Criterios privadas otherCriteria; OrCriteria públicas (criterios de Criteria, Criteria otherCriteria) { this.criteria = criterios; this.otherCriteria = otherCriteria; } @ Override Lista pública <persona> meetCriteria (List <persona> personas) { Lista <persona> firstCriteriaItems = criteria.meetCriteria (personas); Lista <persona> otherCriteriaItems = otherCriteria.meetCriteria (personas); de (persona Persona: otherCriteriaItems) { if (! firstCriteriaItems.contains (persona)) { firstCriteriaItems.add (persona); } } firstCriteriaItems regresar; } }
Paso 4
El uso de diferentes criterios (criterios) y combinaciones de los mismos para filtrar la lista de objetosPersona.
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() +" ]"); } } }
paso 5
Verifique la salida.
Hombres: Persona: [Nombre: Robert, Sexo: masculino, estado civil: Single] Persona: [Nombre: John, Sexo: Masculino, Estado Civil: Casado] Persona: [Nombre: Mike, Sexo: masculino, estado civil: Single] Persona: [Nombre: Bobby, Sexo: masculino, estado civil: Single] mujeres: Persona: [Nombre: Laura, Sexo: Femenino, Estado Civil: Casado] Persona: [Nombre: Diana, Sexo: Femenino, Soltero] Los machos individuales: Persona: [Nombre: Robert, Sexo: masculino, estado civil: Single] Persona: [Nombre: Mike, Sexo: masculino, estado civil: Single] Persona: [Nombre: Bobby, Sexo: masculino, estado civil: Single] Fémina O: Persona: [Nombre: Robert, Sexo: masculino, estado civil: Single] Persona: [Nombre: Diana, Sexo: Femenino, Soltero] Persona: [Nombre: Mike, Sexo: masculino, estado civil: Single] Persona: [Nombre: Bobby, Sexo: masculino, estado civil: Single] Persona: [Nombre: Laura, Sexo: Femenino, Estado Civil: Casado]