Categories
Algorithms & Design Design Pattern

Criterion Pattern

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

Leave a comment

Design a site like this with WordPress.com
Get started