Criteria.java
import java.util.List;
public interface Criteria {
public List meetCriteria(List inputList);
}
Person.java
public class Person {
private boolean isMarried;
private String name;
private boolean isEngineer;
public Person(String name, boolean isMarried,boolean isEngineer) {
// TODO Auto-generated constructor stub
this.name=name;
this.isMarried=isMarried;
this.isEngineer=isEngineer;
}
public boolean isMarried() {
return isMarried;
}
public void setMarried(boolean isMarried) {
this.isMarried = isMarried;
}
public String getName() {
return name;
}
public boolean isEngineer() {
return isEngineer;
}
public void setEngineer(boolean isEngineer) {
this.isEngineer = isEngineer;
}
public void setName(String name) {
this.name = name;
}
public String toString(){
return name+","+isMarried+","+isEngineer;
}
}
IsEngineerCriteria.java
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IsEngineerCriteria implements Criteria {
public IsEngineerCriteria() {
// TODO Auto-generated constructor stub
}
@Override
public List meetCriteria(List inputList) {
// TODO Auto-generated method stub
List filteredList = new ArrayList();
Iterator itr = inputList.iterator();
while(itr.hasNext()){
Person person = (Person)itr.next();
if((person).isEngineer()) filteredList.add(person);
}
return filteredList;
}
}
MarriedCriteria.java
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class MarriedCriteria implements Criteria {
public MarriedCriteria() {
// TODO Auto-generated constructor stub
}
@Override
public List meetCriteria(List inputList) {
// TODO Auto-generated method stub
List filteredList = new ArrayList();
Iterator itr = inputList.iterator();
while(itr.hasNext()){
Person person = (Person)itr.next();
if((person).isMarried()) filteredList.add(person);
}
return filteredList;
}
}
AndCriteria.java
import java.util.List;
public class AndCriteria implements Criteria {
private Criteria criteria1, criteria2;
public AndCriteria(Criteria criteria1, Criteria criteria2) {
// TODO Auto-generated constructor stub
this.criteria1=criteria1;
this.criteria2=criteria2;
}
@Override
public List meetCriteria(List inputList) {
List filteredList1 = criteria1.meetCriteria(inputList);
return criteria2.meetCriteria(filteredList1);
}
}
OrCriteria.java
import java.util.Iterator;
import java.util.List;
public class OrCriteria implements Criteria {
private Criteria criteria1,criteria2;
public OrCriteria(Criteria criteria1, Criteria criteria2) {
// TODO Auto-generated constructor stub
this.criteria1=criteria1;
this.criteria2=criteria2;
}
@Override
public List meetCriteria(List inputList) {
// TODO Auto-generated method stub
List filtered1 = criteria1.meetCriteria(inputList);
List filtered2 = criteria2.meetCriteria(inputList);
Iterator itr = filtered1.iterator();
while(itr.hasNext()){
Person person = (Person)itr.next();
if(!filtered2.contains(person))
filtered2.add(person);
}
return filtered2;
}
}
CriteriaPatternDemo.java
import java.util.ArrayList;
import java.util.List;
public class CriteriaPatternDemo {
public CriteriaPatternDemo() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
List inputList = new ArrayList();
inputList.add(new Person("Jane", false, false));
inputList.add(new Person("Ken", true, false));
inputList.add(new Person("Dan", false, true));
inputList.add(new Person("Mana", true, true));
inputList.add(new Person("Hana", false, false));
inputList.add(new Person("Tana", false, true));
inputList.add(new Person("Mika", true, false));
//get All married
Criteria married = new MarriedCriteria();
System.out.println("All married : "+ married.meetCriteria(inputList).toString());
//get all engineer
Criteria eng = new IsEngineerCriteria();
System.out.println("All engineer : "+ eng.meetCriteria(inputList).toString());
//get married and engineer
Criteria and = new AndCriteria(married,eng);
System.out.println("All married and engineer: "+ and.meetCriteria(inputList).toString());
//get married or engineer
Criteria or = new OrCriteria(married,eng);
System.out.println("All married and engineer: "+ or.meetCriteria(inputList).toString());
System.out.println("All people :" +inputList);
}
}
Output
