天天看点

20190122——Java过滤器模式(条件模式)

过滤器模式或条件模式是一种设计模式,使开发人员可以使用不同的条件过滤一组对象,并通过逻辑操作以解耦方式将其连接,这种类型的设计模式属于结构模式,因为该模式组合多个标准以获得单个标准。

我们将创建一个Person对象,Criteria接口和具体类,实现这个接口来过滤Person对象的列表。

CriteriaPatternDemo是一个演示类,使用Criteria对象基于各种标准及其组合过滤拥有Person对象的列表list

20190122——Java过滤器模式(条件模式)
20190122——Java过滤器模式(条件模式)

第一步

创建应用的标准类

Person.java

package 过滤器模式;

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

           

第二步

创建Criteria接口

package 过滤器模式;

import java.util.List;

public interface Criteria {
    public List<Person> meetCriteria(List<Person> persons);
}

           

这里面只有一个分类的函数,

第三步

实现Criteria接口的具体类

package 过滤器模式;

import java.util.ArrayList;
import java.util.List;

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

           
package 过滤器模式;

import java.util.ArrayList;
import java.util.List;

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

           
package 过滤器模式;

import java.util.ArrayList;
import java.util.List;

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.getGender().equalsIgnoreCase("SINGLE"))
                singlePersons.add(person);
        }
        return singlePersons;
    }
}

           
package 过滤器模式;

import java.util.List;

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