Structural model -- Filter Pattern

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());
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值