过滤器模式(Filter Pattern)或者叫标准模式(Criteria Pattern),就是在全部对象中过滤出我们所定义的标准对应的对象,也属于结构型模式。
实现元素:
对象(组成集合)
接口(标准)
实现(不同的标准实现)
一、建立一个对象
packagecom.xing.design.filter; /***员工类*@authorxing*@createTime*/publicclassEmployee { /***名字*/privateStringname; /***性别*/privateStringgender; /***机构*/privateStringdept; /***工资*/privateintsalary; publicStringgetName() { returnname; } publicvoidsetName(Stringname) { this.name=name; } publicStringgetGender() { returngender; } publicvoidsetGender(Stringgender) { this.gender=gender; } publicStringgetDept() { returndept; } publicvoidsetDept(Stringdept) { this.dept=dept; } publicintgetSalary() { returnsalary; } publicvoidsetSalary(intsalary) { this.salary=salary; } /***构造*@paramname名称*@paramdept机构*@paramsal工资*/publicEmployee(Stringname, Stringgender, Stringdept, intsal) { this.name=name; this.gender=gender; this.dept=dept; this.salary=sal; } publicStringtoString(){ return ("Employee :[ Name : "+name+", dept : "+dept+", salary :"+salary+" ]"); } }
二、编写一个标准接口,用来建立过滤规则
packagecom.xing.design.filter; importjava.util.List; /***标准*@authorxing*@createTime*/publicinterfaceCriteria { /***过滤*@paramlist*@return*/List<Employee>fiterGril(List<Employee>list); }
三、实现上述接口,编写两个不同的过滤规则
1.工资高的肯定好
packagecom.xing.design.filter; importjava.util.ArrayList; importjava.util.List; /***通过工资过滤筛选*@authorxing*@createTime*/publicclassSalaCriteriaimplementsCriteria{ <Employee>fiterGril(List<Employee>list) { List<Employee>newList=newArrayList<>(); for(Employeee : list) { if(e.getSalary() >100) { newList.add(e); } } returnnewList; } }
2.只要真实性别是女的
packagecom.xing.design.filter; importjava.util.ArrayList; importjava.util.List; /***通过性别过滤筛选*@authorxing*@createTime*/publicclassGenderCriteriaimplementsCriteria{ <Employee>fiterGril(List<Employee>list) { List<Employee>newList=newArrayList<>(); for(Employeee : list) { if("女".equals(e.getGender())) { newList.add(e); } } returnnewList; } }
这样,过滤规则就写好了,我们来使用一下。
四、测试
packagecom.xing.design.filter; importjava.util.ArrayList; importjava.util.List; /***过滤器模式FilterPattern*@authorxing*@createTime*/publicclassFilterPatternDemo { publicstaticvoidmain(String[] args) { //一群公主List<Employee>list=newArrayList<>(); list.add(newEmployee("小野", "男", "怡红院", 500)); list.add(newEmployee("小红", "女", "怡红院", 500)); list.add(newEmployee("老鸨", "女", "怡红院", 500)); list.add(newEmployee("加藤鹰", "男", "KTV", 200)); list.add(newEmployee("波多野结衣", "女", "KTV", 200)); list.add(newEmployee("苍井空", "女", "怡红院", 1000)); //工资高肯定就好CriteriasalaCriteria=newSalaCriteria(); System.out.println("工资大于100的:"); System.out.println(salaCriteria.fiterGril(list)); //剔除人妖CriteriagenderCriteria=newGenderCriteria(); System.out.println("性别真实是女的:"); System.out.println(genderCriteria.fiterGril(list)); } }
结果:
我们用工资和性别,过滤出了不同的对象集合,挑吧。
总结:
根据某些规则来过滤出我们需要的东西。
END