过滤器用到了java哪个模式_设计模式之过滤器模式——Java语言描述
过滤器模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来
实现
创建一个Person对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。CriteriaPatternDemo,我们的演示类使用 Criteria 对象,基于各种标准和它们的结合来过滤 Person 对象的列表。
创建一个Person类
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;
}
}
为标准创建一个接口
import java.util.List;
public interface Criteria {
public List meetCriteria(List persons);
}
创建实体类
创建CriteriaMale类
import java.util.ArrayList;
import java.util.List;
public class CriteriaMale implements Criteria {
@Override
public List meetCriteria(List persons) {
List malePersons = new ArrayList();
for (Person person : persons) {
if(person.getGender().equalsIgnoreCase("MALE")){
malePersons.add(person);
}
}
return malePersons;
}
}
创建CriteriaFemale类
import java.util.ArrayList;
import java.util.List;
public class CriteriaFemale implements Criteria {
@Override
public List meetCriteria(List persons) {
List femalePersons = new ArrayList();
for (Person person : persons) {
if(person.getGender().equalsIgnoreCase("FEMALE")){
femalePersons.add(person);
}
}
return femalePersons;
}
}
创建CriteriaSingle类
import java.util.ArrayList;
import java.util.List;
public class CriteriaSingle implements Criteria {
@Override
public List meetCriteria(List persons) {
List singlePersons = new ArrayList();
for (Person person : persons) {
if(person.getMaritalStatus().equalsIgnoreCase("SINGLE")){
singlePersons.add(person);
}
}
return singlePersons;
}
}
创建AndCriteria类
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 meetCriteria(List persons) {
List firstCriteriaPersons = criteria.meetCriteria(persons);
return otherCriteria.meetCriteria(firstCriteriaPersons);
}
}
创建OrCriteria类
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 meetCriteria(List persons) {
List firstCriteriaItems = criteria.meetCriteria(persons);
List otherCriteriaItems = otherCriteria.meetCriteria(persons);
for (Person person : otherCriteriaItems) {
if(!firstCriteriaItems.contains(person)){
firstCriteriaItems.add(person);
}
}
return firstCriteriaItems;
}
}
使用示例
import java.util.ArrayList;
import java.util.List;
public class CriteriaPatternDemo {
public static void main(String[] args) {
List persons = new ArrayList();
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 persons){
for (Person person : persons) {
System.out.println("Person : [ Name : " + person.getName()
+", Gender : " + person.getGender()
+", Marital Status : " + person.getMaritalStatus()
+" ]");
}
}
}
输出结果
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语言描述相关推荐
- 组合模式_[设计模式]10.组合模式
组合模式,也叫"部分整体模式",它把相似的对象组合成树形结构的一个整体.于是,只需一个代表,我们就能继续访问与之相关的同族对象. 模式卡片 模式UML图 七个例子 部门里人很多,大 ...
- 抽象工厂模式_设计模式——抽象工厂模式
阅读目录 使用频率:★★★★★ 一.什么是抽象工厂模式 二.补充说明 三.角色 四.例子 使用频率:★★★★★ 一.什么是抽象工厂模式 就是对一组具有相同主题的工厂进行封装(维基百科解释的很到位): ...
- java 肌汉模式_设计模式之原型模式详解(附源代码)
原型模式(Prototype Pattern) 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...
- java 访问者模式_设计模式之访问者模式
public interface Visitor { public void visitString(StringElement stringE); public void visitFloat(Fl ...
- python 享元模式_设计模式-创建型模式,python享元模式 、python单例模式(7)
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. 享元模式尝 ...
- 米线店结账程序 装饰着模式_设计模式——装饰者模式
<Head First 设计模式> 学习笔记,码云同步更新中 如有错误或不足之处,请一定指出,谢谢~ 目录 查看其它设计模式笔记,点这里→设计模式笔记汇总 装饰者模式 定义: 动态地将责任 ...
- Java进阶专题(七) 设计模式之委派模式与策略模式
一.前言 今天开始我们专题的第七课了.本章节将介绍:你写的代码中是否觉得很臃肿,程序中有大量的if...else,想优化代码,精简程序逻辑,提升代码的可读性,这章节将介绍如何通过委派模式.策略模式让你 ...
- java 类爆炸_设计模式系列·类爆炸之 Bridge 模式
迷之微笑 经过 C 哥的精心指导,消息中心终于上线!代码运行了半个月,稳健无 bug . 王小二托着下腮,看着代码,一抹迷之微笑随之闪现^_^.作为一名有追求的码农,此时的快乐或许只有自己能懂. 消息 ...
- java桥接和装饰_设计模式:桥接模式和装饰模式
原标题:设计模式:桥接模式和装饰模式 一.桥接模式简介 1.基础描述 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥梁模式的用意是&qu ...
最新文章
- Go 分布式学习利器(19)-- Go并发编程 之 CSP(communicating sequential processes) 机制
- Redis进阶-Jedis以及Spring Boot操作 Redis 5.x Cluster
- SQL Server XML转Table
- 老板眼中理想的“数据中台”,是不是真的存在?
- axios重新调用失败的ajax_Vue之axios实现ajax数据请求
- 云原生是趋势吗?学习 K8s 和 Docker 的意义在哪里?
- hadoop中的序列化和反序列化
- 【java笔记】java基本语言风格(注释,数据,运算符)
- WSL下的Docker数据卷挂载
- 自增字段不连续_MySQL中自增主键不连续之解决方案。(20131109)
- 解决apicloud中真机同步海马玩模拟器中每次都要升级apploader的问题
- 十天学会单片机(4)数码管显示的原理,中断系统
- 用matlab计算矩阵的权重,如何使用matlab计算加权平均分
- vivos5字体怎么变大_vivos5手机参数
- Linux下ffmpeg批量转换图片
- 什么是智能颈部按摩仪低频脉冲电流?它会对人体有何影响?
- KylinV10上qt5.9开发应用打包步骤(四)--linuxdeployqt源码编译
- 全网最细最全OLAP之clickhouse笔记|clickhouse文档|clickhouse揭秘文档(三)--clickhouse单机安装和clickhouse集群安装
- AI开发者大会,李彦宏成“宏颜获水”?
- c语言生成随机数猜数字大小,产生一个随机数,进行猜数字小游戏
热门文章
- Hybris服务器启动日志分析
- 纯JavaScript实现的调用设备摄像头并拍照的功能
- SAP UI5 Nav container - how the inner control is added
- SAP UI5不支持delta render
- 使用dom breakpoint找到修改属性的javascript代码
- 阿里云的很多域名没有办法进行实名认证了吗
- CRM订单上状态字段在UI的显示逻辑
- SAP云平台webIDE UI5应用的Application Status菜单实现细节
- 如何使用SAP Gigya的登录服务和您的网站集成
- require php 5.3.0,PHP 5.3.0 安装分析心得