1 过滤器模式
2
class Person{
private String gender;
private String marital;
public Person(String gender, String marital){
this.gender = gender;
this.marital = marital;
}
public String getGender() {
return gender;
}
public String getMarital() {
return marital;
}
}
interface Criteria{
public List<Person> meetCriteria(List<Person> personList);
}
class MaleCriteria implements Criteria{
@Override
public List<Person> meetCriteria(List<Person> personList) {
List<Person> maleList = new ArrayList<>();
for (Person person : personList){
if (person.getGender().equalsIgnoreCase("male")){
maleList.add(person);
}
}
return maleList;
}
}
class maritalCriteria implements Criteria{
@Override
public List<Person> meetCriteria(List<Person> personList) {
List<Person> maritalList = new ArrayList<>();
for (Person person : personList){
if (person.getMarital().equalsIgnoreCase("marital")){
maritalList.add(person);
}
}
return maritalList;
}
}
class OrCriteria implements Criteria{
Criteria criteria1;
Criteria criteria2;
public OrCriteria(Criteria criteria1, Criteria criteria2){
this.criteria1 = criteria1;
this.criteria2 = criteria2;
}
@Override
public List<Person> meetCriteria(List<Person> personList) {
List<Person> personList1 = criteria1.meetCriteria(personList);
List<Person> personList2 = criteria2.meetCriteria(personList);
for (Person person : personList2){
if (!personList1.contains(person)){
personList1.add(person);
}
}
return personList1;
}
}
public class Test{
public static void main(String[] args){
List<Person> personList = new ArrayList<>();
personList.add(new Person("male", "nomarital"));
personList.add(new Person("female", "marital"));
OrCriteria orCriteria = new OrCriteria(new MaleCriteria(), new maritalCriteria());
for (Person person : orCriteria.meetCriteria(personList)){
System.out.println(person.getGender() + " " + person.getMarital());
}
}
}