过滤器模式(Filter Pattern)或者叫标准模式(Criteria Pattern),就是在全部对象中过滤出我们所定义的标准对应的对象,也属于结构型模式。
实现元素:
对象(组成集合)
接口(标准)
实现(不同的标准实现)
一、建立一个对象
packagecom.xing.design.filter; /*** 员工类* @author xing* @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; } /*** 构造* @param name 名称* @param dept 机构* @param sal 工资*/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; /*** 标准* @author xing* @createTime*/publicinterfaceCriteria { /*** 过滤* @param list* @return*/List<Employee>fiterGril(List<Employee>list); } 三、实现上述接口,编写两个不同的过滤规则1.工资高的肯定好packagecom.xing.design.filter; importjava.util.ArrayList; importjava.util.List; /*** 通过工资过滤筛选* @author xing* @createTime*/publicclassSalaCriteriaimplementsCriteria{ publicList<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; /*** 通过性别过滤筛选* @author xing* @createTime*/publicclassGenderCriteriaimplementsCriteria{ publicList<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; /*** 过滤器模式 Filter Pattern* @author xing* @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