过滤器模式

227 阅读1分钟

过滤器模式简介

过滤器顾名思义即是过滤筛选掉不需要的类。实现方式即是通过主体接口提供过滤方法子类详细实现的方法。看代码去理解他把。

实现方式

public class Person {

    private String name;
    private String sex;

    public Person(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

要筛选的类

public interface Classify {

    public List<Person> filter(List<Person> persons);
}

主体内置筛选方法,供子类实现。

public class BoyPerson implements Classify {

    @Override
    public List<Person> filter(List<Person> persons) {
        // jdk中内置的集合过滤方法
        return persons.stream().filter(person ->
            person.getSex().equals("boy")
        ).collect(Collectors.toList());
    }
}
public class GirlPerson implements Classify {

    @Override
    public List<Person> filter(List<Person> persons) {
        return persons.stream().filter(
                person -> person.getSex().equals("girl")
        ).collect(Collectors.toList());
    }
}

子类的具体实现方式,可根据也许需要自我调整。

public class ClassifyTest {

    public static void main(String[] args) {
        List<Person> persons = new LinkedList<>();

        for (int i = 0; i < 10 ; i++) {
            if (i<5) {
                persons.add(new Person(String.valueOf(i), "boy"));
            }else {
                persons.add(new Person(String.valueOf(i), "girl"));
            }
        }

        System.out.println(""+persons.size());
        Classify c = new BoyPerson();
        persons = c.filter(persons);
        System.out.println(""+persons.size());
        persons.stream().forEach(person -> System.out.println(person.toString()));


    }
}

测试类

10
5
Person{name='0', sex='boy'}
Person{name='1', sex='boy'}
Person{name='2', sex='boy'}
Person{name='3', sex='boy'}
Person{name='4', sex='boy'}

Process finished with exit code 0

测试结果

小结

过滤器通过主体过滤接口,详细需求详细实现,扩展性好可读性强。

详细源码下载地址:github.com/Liyinzuo/De…

以上便是过滤器实现方式,错误或者不足的地方欢迎指正。