这里有新鲜出炉的Java并发编程示例,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要介绍了java 过滤器模式(Filter/Criteria Pattern)详细介绍的相关资料,需要的朋友可以参考下
java 过滤器模式(Filter/Criteria Pattern)
过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。
过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。
实现
我们将创建一个 Person 对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。CriteriaPatternDemo,我们的演示类使用 Criteria 对象,基于各种标准和它们的结合来过滤 Person 对象的列表。
步骤 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
使用不同的标准(Criteria)和它们的结合来过滤 Person 对象的列表。
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 ]
来源: http://www.phperz.com/article/17/1127/359800.html