概述
Java过滤器模式
介绍
什么是过滤模式?
比如水泥制造, 沙子是用来混水泥的,如果沙子中大的石头太多那么混出来的水泥就不行很容易就裂了,所以在混水泥前需要使用过滤网将沙子中的大石块给过滤掉 而我们今天学的过滤器就好比就是这过滤沙子的过滤网
比如: 有一万个女方相亲的信息 那么有一个男的来相亲 他说我需要xxx条件的 女方信息 那么我们就可以通过,过滤来将不需要的信息过滤掉显示给男方满足条件的女方信息
案例
我们下面这个案例主要就是过滤 ( 性别, 单身 ) 至于其他的过滤都可参考这个案例来写
**Person ** 实体类
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;
}
}
filtraCriteria 过滤接口
//过滤接口
public interface filtraCriteria {
//传入需要过滤的内容
public List<Person> meetCriteria(List<Person> persons);
}
实现过滤接口的实现类 CriteriaFemale
//过滤类
public class CriteriaFemale implements filtraCriteria {
//放行 性别为女的
@Override
public List<Person> meetCriteria(List<Person> persons) {
List<Person> femalePersons = new ArrayList<Person>();
persons.stream()
.filter(gender -> gender.getGender().equalsIgnoreCase("女"))
.forEach(femalePersons::add);
return femalePersons;
}
}
实现过滤接口的实现类 CriteriaMale
//过滤类
public class CriteriaMale implements filtraCriteria {
//放行 性别为男的
@Override
public List<Person> meetCriteria(List<Person> persons) {
List<Person> malePersons = new ArrayList<Person>();
persons.stream()
.filter(gender->gender.getGender().equalsIgnoreCase("男"))
.forEach(malePersons::add);
return malePersons;
}
}
实现过滤接口的实现类 CriteriaSingle
//过滤类
public class CriteriaSingle implements filtraCriteria {
//放行 是单身的
@Override
public List<Person> meetCriteria(List<Person> persons) {
List<Person> singlePersons = new ArrayList<Person>();
persons.stream()
.filter(maritalStatus->maritalStatus.getMaritalStatus().equalsIgnoreCase("单身"))
.forEach(singlePersons::add);
return singlePersons;
}
}
实现过滤接口的组合实现类 AndCriteria
//组合过滤类 并且
public class AndCriteria implements filtraCriteria {
private filtraCriteria criteria;
private filtraCriteria otherCriteria;
public AndCriteria(filtraCriteria criteria, filtraCriteria otherCriteria) {
this.criteria = criteria;
this.otherCriteria = otherCriteria;
}
@Override
public List<Person> meetCriteria(List<Person> persons) {
List<Person> firstCriteriaPersons = criteria.meetCriteria(persons);
List<Person> people = otherCriteria.meetCriteria(firstCriteriaPersons);
return people;
}
}
我们上面实现了 两个过滤类的组合 当然 三个 四个都行 看你自己设计了
实现过滤接口的组合实现类 OrCriteri
//组合过滤类 或者
public class OrCriteria implements filtraCriteria {
private filtraCriteria criteria;
private filtraCriteria otherCriteria;
public OrCriteria(filtraCriteria criteria, filtraCriteria otherCriteria) {
this.criteria = criteria;
this.otherCriteria = otherCriteria;
}
@Override
public List<Person> meetCriteria(List<Person> persons) {
List<Person> firstORother=new ArrayList<>();
List<Person> firstCriteriaItems = criteria.meetCriteria(persons);
firstCriteriaItems.stream().forEach(firstORother::add);
List<Person> otherCriteriaItems = otherCriteria.meetCriteria(persons);
otherCriteriaItems.stream().forEach(firstORother::add);
return firstORother;
}
}
测试 CriteriaPatternDemo
public class CriteriaPatternDemo {
//遍历集合中信息
public static void printPersons(List<Person> persons){
for (Person person : persons) {
System.out.println("Person : [ Name : " + person.getName()
+", Gender : " + person.getGender()
+", Marital Status : " + person.getMaritalStatus()
+" ]");
}
}
public static void main(String[] args) {
//-------------------需要过滤的信息----------------------------------------
List<Person> persons = new ArrayList<Person>();
persons.add(new Person("Robert","男", "单身"));
persons.add(new Person("John","男", "已婚的"));
persons.add(new Person("Laura","女", "已婚的"));
persons.add(new Person("Diana","女", "单身"));
persons.add(new Person("Mike","男", "单身"));
persons.add(new Person("Bobby","男", "单身"));
// ------------------创建过滤条件类--------------------
filtraCriteria male = new CriteriaMale(); //放行性别 男
filtraCriteria female = new CriteriaFemale(); //放行性别 女
filtraCriteria single = new CriteriaSingle(); //放行 单身
//--------------------创建组合过滤类-----------------------------
filtraCriteria singleMale = new AndCriteria(single, male); //放行单身 并且 性别为男
filtraCriteria andCriteria=new AndCriteria(single, female);//放行单身 并且 性别为女
filtraCriteria singleOrFemale = new OrCriteria(single, female); //放行单身 或者性别为女
//-------------------打印过滤后的 信息-------------------
System.out.println("男的: ");
printPersons(male.meetCriteria(persons));
System.out.println("n女的: ");
printPersons(female.meetCriteria(persons));
System.out.println("n单身 男的: ");
printPersons(singleMale.meetCriteria(persons));
System.out.println("n单身 女的 ");
printPersons(andCriteria.meetCriteria(persons));
System.out.println("n单身 或者 女的: ");
printPersons(singleOrFemale.meetCriteria(persons));
}
}
男的:
Person : [ Name : Robert, Gender : 男, Marital Status : 单身 ]
Person : [ Name : John, Gender : 男, Marital Status : 已婚的 ]
Person : [ Name : Mike, Gender : 男, Marital Status : 单身 ]
Person : [ Name : Bobby, Gender : 男, Marital Status : 单身 ]女的:
Person : [ Name : Laura, Gender : 女, Marital Status : 已婚的 ]
Person : [ Name : Diana, Gender : 女, Marital Status : 单身 ]单身 男的:
Person : [ Name : Robert, Gender : 男, Marital Status : 单身 ]
Person : [ Name : Mike, Gender : 男, Marital Status : 单身 ]
Person : [ Name : Bobby, Gender : 男, Marital Status : 单身 ]单身 女的
Person : [ Name : Diana, Gender : 女, Marital Status : 单身 ]单身 或者 女的:
Person : [ Name : Robert, Gender : 男, Marital Status : 单身 ]
Person : [ Name : Diana, Gender : 女, Marital Status : 单身 ]
Person : [ Name : Mike, Gender : 男, Marital Status : 单身 ]
Person : [ Name : Bobby, Gender : 男, Marital Status : 单身 ]
Person : [ Name : Laura, Gender : 女, Marital Status : 已婚的 ]
Person : [ Name : Diana, Gender : 女, Marital Status : 单身 ]
最后
以上就是含糊海燕为你收集整理的Java过滤器模式Java过滤器模式的全部内容,希望文章能够帮你解决Java过滤器模式Java过滤器模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复