Java过滤器模式(条件模式)
来源:互联网 发布:p社 mac 编辑:程序博客网 时间:2024/06/09 20:43
过滤器模式或条件模式是一种设计模式,使开发人员可以使用不同的条件过滤一组对象,并通过逻辑操作以解耦方式将其链接。 这种类型的设计模式属于结构模式,因为该模式组合多个标准以获得单个标准。
实现实现
我们将创建一个Person
对象,Criteria
接口和具体类,实现这个接口来过滤Person
对象的列表。CriteriaPatternDemo
是一个演示类,使用Criteria
对象基于各种标准及其组合过滤拥有Person
对象的列表(List
)。
示例的结构图如下 -
第1步
创建要应用标准的类。
Person.java
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; } }
第2步
创建Criteria
的接口。
Criteria.java
import java.util.List;public interface Criteria { public List<Person> meetCriteria(List<Person> persons);}
第3步
创建实现Criteria
接口的具体类。
CriteriaMale.java
import java.util.ArrayList;import java.util.List;public class CriteriaMale implements Criteria { @Override public List<Person> meetCriteria(List<Person> persons) { List<Person> malePersons = new ArrayList<Person>(); for (Person person : persons) { if(person.getGender().equalsIgnoreCase("MALE")){ malePersons.add(person); } } return malePersons; }}
CriteriaFemale.java
import java.util.ArrayList;import java.util.List;public class CriteriaFemale implements Criteria { @Override public List<Person> meetCriteria(List<Person> persons) { List<Person> femalePersons = new ArrayList<Person>(); for (Person person : persons) { if(person.getGender().equalsIgnoreCase("FEMALE")){ femalePersons.add(person); } } return femalePersons; }}
CriteriaSingle.java
import java.util.ArrayList;import java.util.List;public class CriteriaSingle implements Criteria { @Override public List<Person> meetCriteria(List<Person> persons) { List<Person> singlePersons = new ArrayList<Person>(); for (Person person : persons) { if(person.getMaritalStatus().equalsIgnoreCase("SINGLE")){ singlePersons.add(person); } } return singlePersons; }}
AndCriteria.java
import java.util.List;public class AndCriteria implements Criteria { private Criteria criteria; private Criteria otherCriteria; public AndCriteria(Criteria criteria, Criteria otherCriteria) { this.criteria = criteria; this.otherCriteria = otherCriteria; } @Override public List<Person> meetCriteria(List<Person> persons) { List<Person> firstCriteriaPersons = criteria.meetCriteria(persons); return otherCriteria.meetCriteria(firstCriteriaPersons); }}
OrCriteria.java
import java.util.List;public class OrCriteria implements Criteria { private Criteria criteria; private Criteria otherCriteria; public OrCriteria(Criteria criteria, Criteria otherCriteria) { this.criteria = criteria; this.otherCriteria = otherCriteria; } @Override public List<Person> meetCriteria(List<Person> persons) { List<Person> firstCriteriaItems = criteria.meetCriteria(persons); List<Person> otherCriteriaItems = otherCriteria.meetCriteria(persons); for (Person person : otherCriteriaItems) { if(!firstCriteriaItems.contains(person)){ firstCriteriaItems.add(person); } } return firstCriteriaItems; }}
第4步
使用不同的条件及其组合过滤掉人。
CriteriaPatternDemo.java
public class CriteriaPatternDemo { public static void main(String[] args) { List<Person> persons = new ArrayList<Person>(); persons.add(new Person("Robert","Male", "Single")); persons.add(new Person("John", "Male", "Married")); persons.add(new Person("Laura", "Female", "Married")); persons.add(new Person("Diana", "Female", "Single")); persons.add(new Person("Mike", "Male", "Single")); persons.add(new Person("Bobby", "Male", "Single")); Criteria male = new CriteriaMale(); Criteria female = new CriteriaFemale(); Criteria single = new CriteriaSingle(); Criteria singleMale = new AndCriteria(single, male); Criteria singleOrFemale = new OrCriteria(single, female); System.out.println("Males: "); printPersons(male.meetCriteria(persons)); System.out.println("\nFemales: "); printPersons(female.meetCriteria(persons)); System.out.println("\nSingle Males: "); printPersons(singleMale.meetCriteria(persons)); System.out.println("\nSingle Or Females: "); printPersons(singleOrFemale.meetCriteria(persons)); } 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() + " ]"); } } }
第5步
验证输出结果,执行上面的代码得到结果如下 -
Males: Person : [ Name : Robert, Gender : Male, Marital Status : Single ]Person : [ Name : John, Gender : Male, Marital Status : Married ]Person : [ Name : Mike, Gender : Male, Marital Status : Single ]Person : [ Name : Bobby, Gender : Male, Marital Status : Single ]Females: Person : [ Name : Laura, Gender : Female, Marital Status : Married ]Person : [ Name : Diana, Gender : Female, Marital Status : Single ]Single Males: Person : [ Name : Robert, Gender : Male, Marital Status : Single ]Person : [ Name : Mike, Gender : Male, Marital Status : Single ]Person : [ Name : Bobby, Gender : Male, Marital Status : Single ]Single Or Females: Person : [ Name : Robert, Gender : Male, Marital Status : Single ]Person : [ Name : Diana, Gender : Female, Marital Status : Single ]Person : [ Name : Mike, Gender : Male, Marital Status : Single ]Person : [ Name : Bobby, Gender : Male, Marital Status : Single ]Person : [ Name : Laura, Gender : Female, Marital Status : Married ]
阅读全文
0 0
- Java过滤器模式(条件模式)
- Java过滤器模式(条件模式)
- java设计模式09_过滤器模式(条件模式)
- Java拦截过滤器模式
- Java拦截过滤器模式
- Java Filter Pattern(过滤器模式)
- java责任链模式(过滤器)
- java 设计模式之过滤器模式(Filter)
- java设计模式之过滤器模式
- 过滤器模式
- 过滤器模式
- 过滤器模式
- 过滤器模式
- 过滤器模式
- 设计模式--过滤器模式
- 设计模式-过滤器模式
- JAVA责任链模式-过滤器原理
- JAVA责任链模式-过滤器原理
- 利用OpenCV感知哈希算法进行图片相似度对比
- MongoDB数据库连接
- 树莓派新版系统上使用mjpg实现摄像头监控
- 我的Vim(Gvim) 配置
- ThinkPHP基础
- Java过滤器模式(条件模式)
- JS中判断字符串中出现次数最多的字符及出现的次数
- 数字图像处理研究的主要内容
- 【Java】方法重载和方法重写的区别
- java基础复习——列出指定目录下的目录和文件
- 格式化通达OA会签意见,HR虚线分隔
- you build it,you run it
- Struts工程的创建步骤
- Spark源码核心与开发实战---Spark RDD与Spark API编程实例