过滤器模式简介
过滤器顾名思义即是过滤筛选掉不需要的类。实现方式即是通过主体接口提供过滤方法子类详细实现的方法。看代码去理解他把。
实现方式
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…
以上便是过滤器实现方式,错误或者不足的地方欢迎指正。