开发者社区> 兴化> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

设计模式-3-过滤器模式

简介: 过滤器模式(Filter Pattern)或者叫标准模式(Criteria Pattern),就是在全部对象中过滤出我们所定义的标准对应的对象,也属于结构型模式。
+关注继续查看

过滤器模式(Filter Pattern)或者叫标准模式(Criteria Pattern),就是在全部对象中过滤出我们所定义的标准对应的对象,也属于结构型模式。

实现元素:

对象(组成集合)

接口(标准)

实现(不同的标准实现)


一、建立一个对象

package com.xing.design.filter;
/**
 * 员工类
 * @author xing
 * @createTime
 */
public class Employee {
/**
   * 名字
   */
private String name;
/**
   * 性别
   */
private String gender;
/**
   * 机构 
   */
private String dept;
/**
   * 工资
   */
  private int salary;
public String getName() {
return name;
  }
public void setName(String name) {
this.name = name;
  }
public String getGender() {
return gender;
  }
public void setGender(String gender) {
this.gender = gender;
  }
public String getDept() {
return dept;
  }
public void setDept(String dept) {
this.dept = dept;
  }
public int getSalary() {
return salary;
  }
public void setSalary(int salary) {
this.salary = salary;
  }
/**
   * 构造
   * @param name 名称
   * @param dept 机构
   * @param sal 工资
   */
public Employee(String name, String gender, String dept, int sal) {
this.name = name;
this.gender = gender;
this.dept = dept;
this.salary = sal;
  }
public String toString(){
return ("Employee :[ Name : "+ name 
     +", dept : "+ dept + ", salary :"
     + salary+" ]");
  }   
}


二、编写一个标准接口,用来建立过滤规则

package com.xing.design.filter;
import java.util.List;
/**
 *  标准
 * @author xing
 * @createTime
 */
public interface Criteria {
/**
   *  过滤
   * @param list
   * @return
   */
  List<Employee> fiterGril(List<Employee> list);
}
三、实现上述接口,编写两个不同的过滤规则
1.工资高的肯定好
package com.xing.design.filter;
import java.util.ArrayList;
import java.util.List;
/**
 *  通过工资过滤筛选
 * @author xing
 * @createTime
 */
public class SalaCriteria implements Criteria{
  @Override
public List<Employee> fiterGril(List<Employee> list) {
List<Employee> newList = new ArrayList<>();
for(Employee e : list) {
if(e.getSalary() > 100) {
        newList.add(e);
      }
    }
return newList;
  }
}


2.只要真实性别是女的

package com.xing.design.filter;
import java.util.ArrayList;
import java.util.List;
/**
 *  通过性别过滤筛选
 * @author xing
 * @createTime
 */
public class GenderCriteria implements Criteria{
  @Override
public List<Employee> fiterGril(List<Employee> list) {
List<Employee> newList = new ArrayList<>();
for(Employee e : list) {
if("女".equals(e.getGender())) {
        newList.add(e);
      }
    }
return newList;
  }
}

       这样,过滤规则就写好了,我们来使用一下。

四、测试

package com.xing.design.filter;
import java.util.ArrayList;
import java.util.List;
/**
 *  过滤器模式 Filter Pattern
 * @author xing
 * @createTime
 */
public class FilterPatternDemo {
public static void main(String[] args) {
// 一群公主
    List<Employee> list = new ArrayList<>();
list.add(new Employee("小野", "男", "怡红院", 500));
list.add(new Employee("小红", "女", "怡红院", 500));
list.add(new Employee("老鸨", "女", "怡红院", 500));
list.add(new Employee("加藤鹰", "男", "KTV", 200));
list.add(new Employee("波多野结衣", "女", "KTV", 200));
list.add(new Employee("苍井空", "女", "怡红院", 1000));
// 工资高肯定就好
    Criteria salaCriteria = new SalaCriteria();
    System.out.println("工资大于100的:");
    System.out.println(salaCriteria.fiterGril(list));
// 剔除人妖
    Criteria genderCriteria = new GenderCriteria();
    System.out.println("性别真实是女的:");
    System.out.println(genderCriteria.fiterGril(list));
  }
}

       我们用工资和性别,过滤出了不同的对象集合,挑吧。


总结:

       根据某些规则来过滤出我们需要的东西。


END

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
设计模式之装饰器模式
装饰器在java中最典型的应用就是IO,我们知道在IO家族中有各种各样的流,而流往往都是作用在子类之上,然后增加其附加功能,我们以InputStream 举例。
42 0
设计模式(3)
设计模式(3)
18 0
【设计模式】装饰器
【设计模式】装饰器
28 0
23种设计模式(三)--装饰器模式
23种设计模式(三)--装饰器模式
45 0
设计模式-装饰器模式
装饰器模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更为灵活;它允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰器模式属于结构型模式。
47 0
设计模式(十)装饰器模式
装饰器模式是一种非常有用的结构型模式,它允许我们在不改变类的结果的情况下,为类添加新的功能。 我们来举例说明一下。首先添加一组形状,它们都实现了形状接口。
762 0
金额输入框过滤器
实时监听输入框数据,如果不满足条件,原数据不发生变化,新的操作无效。依赖 LogUtil package github.alex.decimaledittext.
733 0
设计模式(二)之装饰器模式
定义一个代表被装饰事物的接口: public interface Coffee { public String getCoffer(); public double getPrice(); } 最初的具体事物: public class Starbucks implements Coffee { @Override pub
1062 0
过滤器
过滤器就是在请求处理之前,对URL 进行判断,在这里可以进行权限的过滤,将不具有权限访问的用户过滤掉,但是经常我们也可以使用拦截器进行类似的操作,其实过滤器和拦截器的区别挺大的。 我在这里只从一点说明。
638 0
+关注
兴化
码中自由一片天地。。。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
继承与功能组合
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载