java过滤器模式

Java中的过滤器模式(Filter Design Pattern)也称为标准模式(Criteria Pattern),它用于通过一系列条件来筛选对象的集合。过滤器模式允许将多个过滤条件组合在一起,以便根据不同的需求过滤对象。

在过滤器模式中,通常包含以下主要角色:

  1. 过滤器接口(Criteria):定义用于筛选对象的方法。

  2. 具体过滤器(ConcreteCriteria):实现过滤器接口,根据不同的条件对对象进行筛选。

  3. 过滤器管理器(CriteriaFilter):包含多个过滤器对象,并根据不同的条件组合它们,对对象进行筛选。

  4. 客户端(Client):使用过滤器管理器来过滤对象集合,并获取满足条件的对象。

下面是一个简单的示例:

首先,我们创建一个过滤器接口(Criteria):

import java.util.List;

public interface Criteria {
    List meetCriteria(List persons);
}
然后,我们创建一个具体过滤器(ConcreteCriteria),实现过滤器接口,并根据不同的条件对对象进行筛选:

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

public class MaleCriteria implements Criteria {
    @Override
    public List meetCriteria(List persons) {
        List malePersons = new ArrayList<>();
        for (Person person : persons) {
            if (person.getGender().equalsIgnoreCase("MALE")) {
                malePersons.add(person);
            }
        }
        return malePersons;
    }
}

public class FemaleCriteria implements Criteria {
    @Override
    public List meetCriteria(List persons) {
        List femalePersons = new ArrayList<>();
        for (Person person : persons) {
            if (person.getGender().equalsIgnoreCase("FEMALE")) {
                femalePersons.add(person);
            }
        }
        return femalePersons;
    }
}
接下来,我们创建一个过滤器管理器(CriteriaFilter),包含多个过滤器对象,并根据不同的条件组合它们,对对象进行筛选:

import java.util.List;

public class CriteriaFilter implements Criteria {
    private Criteria criteria;
    private Criteria otherCriteria;

    public CriteriaFilter(Criteria criteria, Criteria otherCriteria) {
        this.criteria = criteria;
        this.otherCriteria = otherCriteria;
    }

    @Override
    public List meetCriteria(List persons) {
        List firstCriteriaPersons = criteria.meetCriteria(persons);
        return otherCriteria.meetCriteria(firstCriteriaPersons);
    }
}
现在,我们可以使用过滤器模式来过滤对象集合。首先,创建一个列表对象,然后使用具体过滤器对该列表进行筛选,并获取满足条件的对象:

public class Main {
    public static void main(String[] args) {
        List persons = new ArrayList<>();
        persons.add(new Person("Alice", "FEMALE"));
        persons.add(new Person("Bob", "MALE"));
        persons.add(new Person("Charlie", "MALE"));
        persons.add(new Person("Diana", "FEMALE"));

        Criteria maleCriteria = new MaleCriteria();
        Criteria femaleCriteria = new FemaleCriteria();
        Criteria maleAndFemaleCriteria = new CriteriaFilter(maleCriteria, femaleCriteria);

        System.out.println("Males:");
        printPersons(maleCriteria.meetCriteria(persons));

        System.out.println("\nFemales:");
        printPersons(femaleCriteria.meetCriteria(persons));

        System.out.println("\nMales and Females:");
        printPersons(maleAndFemaleCriteria.meetCriteria(persons));
    }

    private static void printPersons(List persons) {
        for (Person person : persons) {
            System.out.println("Name: " + person.getName() + ", Gender: " + person.getGender());
        }
    }
}
输出结果:

Males:
Name: Bob, Gender: MALE
Name: Charlie, Gender: MALE

Females:
Name: Alice, Gender: FEMALE
Name: Diana, Gender: FEMALE

Males and Females:
这个例子展示了过滤器模式的实现方式。通过创建过滤器接口、具体过滤器和过滤器管理器,并在过滤器管理器中根据不同的条件组合过滤器,可以实现对对象集合的灵活筛选。过滤器模式可以让客户端根据不同的条件筛选对象,而无需修改对象类本身,从而提高了代码的可维护性和灵活性。

你可能感兴趣的:(java,java,开发语言)