-
什么是过滤器模式
- 过滤器模式允许通过不同的标准来过滤一个对象。
-
举个例子
- 我们开发了一个网站,开放了评论功能,现在我们需要根据不同的评论来过滤出真爱粉或者小黑子。
- 实体类
public class info {
public int id;
public String content;
}
public interface ContentFilter {
public List<info> filter(List<info> l);
}
public class BlackFilterImpl implements ContentFilter{
private HashSet<String> quoSet;
public BlackFilterImpl() {
this.quoSet = new HashSet<>();
quoSet.add("小黑子素质666");
quoSet.add("苏珊");
}
@Override
public List<info> filter(List<info> l) {
ArrayList<info> array = new ArrayList<>();
for (info info : l) {
if (quoSet.contains(info.content)){
array.add(info);
}
}
return array;
}
}
public class fansFilterImpl implements ContentFilter{
private final Set<String> quoSet;
public fansFilterImpl() {
this.quoSet = new HashSet<>();
quoSet.add("哥哥好帅");
quoSet.add("你们就是嫉妒我家哥哥");
quoSet.add("批金为王,伴kun远航");
}
@Override
public List<info> filter(List<info> l) {
List<info> res=new ArrayList<>();
for (info info : l) {
if (quoSet.contains(info.content)){
res.add(info);
}
}
return res;
}
}
-
测试
- 我们只需要创建不同的过滤器就可以过滤出不同的数据了
public static void main(String[] args) {
List<info> l=new ArrayList<>();
l.add(new info(1,"小黑子素质666"));
l.add(new info(2,"苏珊"));
ContentFilter blackFilter = new BlackFilterImpl();
ContentFilter fansFilter = new fansFilterImpl();
List<info> filter = blackFilter.filter(l);
List<info> filter1 = fansFilter.filter(l);
}