Latest web development tutorials

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.

patrón de filtro diagrama UML

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]