Java设计模-过滤器模式
过滤器模式
实现

步骤 1
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
 | 
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
| 
 1 
2 
3 
4 
5 
 | 
import java.util.List;    public interface Criteria {       public List<Person> meetCriteria(List<Person> persons);    } | 
步骤 3
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
 | 
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;       }    } | 
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
 | 
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;       }    } | 
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
 | 
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;       }    } | 
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
 | 
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);       }    } | 
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
 | 
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
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
 | 
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
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
 | 
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 ] | 
Java设计模-过滤器模式的更多相关文章
- Java设计模式应用——过滤器模式
		
storm引擎计算出一批中间告警结果,会发送一条kafka消息给告警入库服务,告警入库服务接收到kafka消息后读取中间告警文件,经过一系列处理后把最终告警存入mysql中. 实际上,中间告警结果可能 ...
 - java设计优化--代理模式
		
代理模式使用代理对象完成用户的请求,屏蔽用户对真实对象的访问. 代理模式的用途很多,比如因为安全原因,需要屏蔽客户端直接访问真实对象:或者在远程调用中,需要使用代理对象处理远程方法中的技术细节:或者为 ...
 - java设计模——反射的应用 (利用反射来去除if判断语句)
		
利用反射来去除if判断语句 我的以前写的一个查分系统,就是部长让我写的那个,使用一个分发器(函数),他会根据传递进来的字符串参数调用不同的方. If(“add”.equalsIgnoreCase(fu ...
 - 设计模式之过滤器模式——Java语言描述
		
过滤器模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来 实现 创建一个Person对象.Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列 ...
 - Java计模模式之六 ----- 组合模式和过滤器模式
		
前言 在上一篇中我们学习了结构型模式的外观模式和装饰器模式.本篇则来学习下组合模式和过滤器模式. 组合模式 简介 组合模式是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来 ...
 - Java拦截过滤器模式
		
当我们想要对应用程序的请求或响应进行一些预处理/后处理时,使用截取过滤器设计模式. 在将请求传递到实际目标应用程序之前,在请求上定义和应用过滤器. 过滤器可以进行请求的认证/授权/日志记录或跟踪,然后 ...
 - java设计模式之原型模式
		
原型模式概念 该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.java中复制通过clone()实现的.clone中涉及深.浅复制.深.浅复制的概念如下: ⑴浅复制 ...
 - Java设计模式——装饰者模式
		
JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...
 - JAVA 23种开发模式详解(代码举例)
		
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
 
随机推荐
- Linq------连表查询
			
1 List<Student> list = new List<Student>() { ,sex="男"}, ,sex="男"}, , ...
 - nginx 负载策略
			
1.轮询(weight=1) 默认选项,当weight不指定时,各服务器weight相同,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. upstream bak ...
 - STM32重映射
 - zip4j 2.0压缩  加密压缩
			
https://github.com/srikanth-lingala/zip4j ZipParameters zipParameters = new ZipParameters(); zipPara ...
 - java数据库连接池比较
			
dbcp dbcp可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池吧.这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有.这个连接 ...
 - ae基础一
			
1.导入素材2.整理素材3.创建合成1280*720是高清的模式 也是平时都用的格式 HDV/HDTV 720 251920*1080是超清的模式格式是以16:9的格式显示的 电脑电视机都是用这个比例 ...
 - tensorflow deeplabv3 训练自己的数据集
			
https://blog.csdn.net/malvas/article/details/90776327
 - caffe不同lr_policy参数设置方法
			
fixed 参数: base_lr: 0.01 lr_policy: "fixed" max_iter: 400000 step 参数: base_lr: 0.01 lr_poli ...
 - POJ 1734 Sightseeing trip(Floyd)
			
题目传送门 题目中文翻译: Description 桑给巴尔岛上的阿德尔顿镇有一家旅行社,它已决定为其客户提供除了许多其他名胜之外的景点.为了尽可能地从景点赚取收入,该机构已经接受了一个精明的决定:有 ...
 - numpy 加速 以及 ipython
			
先安装openblas, 然后用pip 安装numpy sudo ln -s /usr/lib64/libopenblas-r0.2.14.so /usr/lib64/libopenblas.so 为 ...