Java实现(08)——过滤器模式(Filter Pattern)

来源:互联网 发布:德州扑克 技巧 知乎 编辑:程序博客网 时间:2024/05/22 06:57

过滤器模式可以帮助开发者根据一些条件来选择对象,也可以是这些条件的组合。本例创建一个Person类,和Criteria接口,以及具体的实现。


public class Person {    private String name;    private String gender;    private String maritalStatus;    public Person(String name, String gender, String maritalStatus) {        this.name = name;        this.gender = gender;        this.maritalStatus = maritalStatus;    }    public String getName() {        return name;    }    public String getGender() {        return gender;    }    public String getMaritalStatus() {        return maritalStatus;    }}

import java.util.List;/** * Created by wang on 16-12-17. */public interface Criteria {    public List<Person> meetCriteria(List<Person> persons);}

import java.util.ArrayList;import java.util.List;/** * Created by wang on 16-12-17. */public class CriteriaMale implements Criteria{    @Override    public List<Person> meetCriteria(List<Person> persons) {        List<Person> malePersons = new ArrayList<Person>();        for (Person person : persons) {            if (person.getGender().equalsIgnoreCase("MALE")) {                malePersons.add(person);            }        }        return malePersons;    }}

import java.util.ArrayList;import java.util.List;/** * Created by wang on 16-12-17. */public class CriteriaFemale implements Criteria{    @Override    public List<Person> meetCriteria(List<Person> persons) {        List<Person> femalePersons = new ArrayList<Person>();        for (Person person : persons) {            if (person.getGender().equalsIgnoreCase("FEMALE")) {                femalePersons.add(person);            }        }        return femalePersons;    }}

import java.util.ArrayList;import java.util.List;/** * Created by wang on 16-12-17. */public class CriteriaSingle implements Criteria {    @Override    public List<Person> meetCriteria(List<Person> persons) {        List<Person> singlePersons = new ArrayList<Person>();        for (Person person : persons) {            if (person.getMaritalStatus().equalsIgnoreCase("SINGLE")) {                singlePersons.add(person);            }        }        return singlePersons;    }}
import java.util.List;/** * Created by wang on 16-12-17. */public class AndCriteria implements Criteria {    private Criteria criteria;    private Criteria otherCriteria;    public AndCriteria(Criteria criteria, Criteria otherCriteria) {        this.criteria = criteria;        this.otherCriteria = otherCriteria;    }    @Override    public List<Person> meetCriteria(List<Person> persons) {        List<Person> firstCriteriaPersons = criteria.meetCriteria(persons);        return otherCriteria.meetCriteria(firstCriteriaPersons);    }}
import java.util.List;/** * Created by wang on 16-12-17. */public class OrCriteria implements Criteria {    private Criteria criteria;    private Criteria otherCriteria;    public OrCriteria(Criteria criteria, Criteria otherCriteria) {        this.criteria = criteria;        this.otherCriteria = otherCriteria;    }    @Override    public List<Person> meetCriteria(List<Person> persons) {        List<Person> firstCriterialItems = criteria.meetCriteria(persons);        List<Person> otherCriterialItems = otherCriteria.meetCriteria(persons);        for (Person person : otherCriterialItems) {            if (!firstCriterialItems.contains(person)) {                firstCriterialItems.add(person);            }        }        return firstCriterialItems;    }}

输出:

Males:
Person : [ Name : Robert, Gender : Male, Marital Status : Single ]
Person : [ Name : John, Gender : Male, Marital Status : Married ]
Person : [ Name : Mike, Gender : Male, Marital Status : Single ]
Person : [ Name : Bobby, Gender : Male, Marital Status : Single ]

Females:
Person : [ Name : Laura, Gender : Female, Marital Status : Married ]
Person : [ Name : Diana, Gender : Female, Marital Status : Single ]

Single Males:
Person : [ Name : Robert, Gender : Male, Marital Status : Single ]
Person : [ Name : Mike, Gender : Male, Marital Status : Single ]
Person : [ Name : Bobby, Gender : Male, Marital Status : Single ]

Single or Females:
Person : [ Name : Robert, Gender : Male, Marital Status : Single ]
Person : [ Name : Diana, Gender : Female, Marital Status : Single ]
Person : [ Name : Mike, Gender : Male, Marital Status : Single ]
Person : [ Name : Bobby, Gender : Male, Marital Status : Single ]
Person : [ Name : Laura, Gender : Female, Marital Status : Married ]

0 0
原创粉丝点击