Latest web development tutorials

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.

Filtro padrão UML diagrama

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]