`
lyc984006207
  • 浏览: 24787 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

设计模式之过滤器模式

    博客分类:
  • java
阅读更多
过滤器见名知意,就是过滤一些你不想看到的东西,



package com.lyc.design;

import java.util.ArrayList;
import java.util.List;

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() + " ]");
}
}
}

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;
}
}

interface Criteria {
public List<Person> meetCriteria(List<Person> persons);
}

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;
}
}

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;
}
}

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;
}
}

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);
}
}

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;
}
}
分享到:
评论

相关推荐

    java的设计模式之过滤器模式.docx

    过滤器模式,也称为 Chain of Responsibility 模式,是一种行为设计模式,主要用于处理请求的过滤逻辑。在 Java 中,过滤器模式通常应用于网络请求、数据预处理或权限控制等场景。这种模式允许我们通过一系列相互...

    java设计模式之过滤器模式.docx

    26 }27 }28 }FilterHolder一个过滤器链表实现:1 import java.util.ArrayList; 2 import java.util.List; 3 4 /** 5 * @title: DemoFilterChain 6 * @Author junyu 7 * 旧巷里有一个穿着白衬衫笑起来如太阳般温暖我...

    设计模式-过滤器模式

    过滤器模式,又称为Criteria模式或Specification模式,是一种在软件设计中常见的行为设计模式,它主要用来封装一系列的条件判断,使复杂的查询过程简化。在iOS开发中,过滤器模式可以用于处理数据筛选,比如在App中...

    设计模式-拦截过滤器

    拦截过滤器模式是其中的一种行为设计模式,它在请求处理之前或之后执行一系列操作,提供了灵活且可扩展的方式来处理各种任务。这种模式在iOS平台上的应用同样广泛,尤其是在构建应用程序的架构时。 ### 拦截过滤器...

    【Java设计模式】拦截过滤器模式

    Java中的拦截过滤器模式是一种强大的设计模式,允许高效地处理Web请求。该模式支持在过滤器链中应用多个过滤器来处理和修改请求和响应。 ## 二、详细解释及实际示例 1. **实际示例**: - 考虑进入一个安全的办公...

    【Java设计模式】过滤器模式

    &gt; 想象一个图书馆系统使用过滤器模式来动态组合过滤标准,如类型、作者和可用性。这个Java模式使系统更具可维护性和可扩展性。图书馆系统不是为每个可能的标准组合编写单独的方法,而是采用过滤器设计模式。每个过滤...

    java常用设计模式-过滤器模式

    Java 过滤器模式(Filter Pattern)是一种常用的设计模式,用于在请求到达目标对象之前或之后,对请求进行处理或过滤。该模式可以用于实现不同的功能,如验证、授权、日志记录、压缩等,将不同的操作当作过滤链中的...

    拦截过滤器模式

    **拦截过滤器模式(Intercepting Filter Pattern)**是一种软件设计模式,主要用于对应用程序的请求或响应进行预处理或后处理。它允许我们在请求到达目标组件之前或响应离开目标组件之后插入一系列过滤器,这些过滤...

    人人都懂设计模式 人人都懂设计模式

    在“进阶篇”中,作者讲解了设计模式在实际开发中的应用,包括过滤器模式、对象池技术、回调机制和 MVC 模式等。在“经验篇”中,作者分享了自己在设计模式和软件开发方面的经验和看法,包括设计原则、项目重构等。 ...

    Asp.NetCore示例代码-权限验证-过滤器-设计模式等

    在Asp.NetCore框架中,开发人员经常遇到各种挑战,如权限验证、过滤器的使用以及设计模式的应用。本示例代码集旨在帮助开发者更好地理解和应用这些关键概念。以下是关于这些主题的详细讨论: 1. **Asp.NetCore**:...

    管道过滤器程序,主要用java实现

    管道过滤器模式是一种设计模式,它在软件工程中被广泛应用于数据处理,特别是在Java编程语言中。这种模式通过连接一系列的处理组件(过滤器),每个组件执行特定的任务,来实现复杂的数据转换。在这个场景中,"管道...

    bxCAN的过滤器的4种工作模式以及使用方法总结

    ### bxCAN过滤器的4种工作模式及使用方法详解 #### 一、引言 在嵌入式系统开发中,bxCAN (Basic eXtended Controller Area Network) 是STM32微控制器系列中非常重要的一个外设,用于支持CAN通信协议。随着STM32...

    mvc模式过滤器简单登录

    在这个“mvc模式过滤器简单登录”项目中,我们看到开发者使用了这种模式来构建一个与MySQL数据库交互的登录系统,并且应用了过滤器技术以增强系统的安全性。 首先,让我们深入理解一下MVC模式: 1. **模型(Model...

    设计模式实验报告.rar

    3. **迭代器模式**:迭代器模式提供了一种遍历集合元素的方法,而无需暴露其内部结构。它允许顺序访问聚合对象的元素,但不暴露其底层表示。报告可能包含了如何实现一个迭代器接口以及如何在容器类中使用迭代器的...

    Java设计模式面试题汇总

    包括适配器模式、桥接模式、过滤器模式、组合模式、装饰器模式、外观模式、享元模式、代理模式等。 行为型模式:通过类之间不同通信方式实现不同行为。包括责任链模式、命名模式、解释器模式、迭代器模式、中介者...

    mvc模式过滤器简单注册登录

    总结来说,"mvc模式过滤器简单注册登录"项目是一个基于MVC模式的Java Web应用,它利用过滤器实现用户登录验证,连接MySQL数据库存储用户信息。项目的实现包括模型层的业务处理、视图层的用户界面展示以及控制器的...

    管道过滤器(软件体系结构)

    良好的体系结构能够确保软件系统的成功部署与维护,而管道过滤器模式作为软件体系结构的一种常见形式,在诸多领域内得到了广泛的应用。 #### 管道过滤器模型 管道过滤器模型是一种面向数据流的软件体系结构,它...

    二十三种设计模式【PDF版】

    设计模式之 Decorator(装饰器) Decorator 是个油漆工,给你的东东的外表刷上美丽的颜色. 设计模式之 Bridge(桥连) 将牛郎织女分开(本应在一起,分开他们,形成两个接口),在他们之间搭建一个桥(动态的结合) 设计模式...

    软件设计模式与体系结构(讲解+代码)

    上篇:软件设计模式例子代码  【例2.2】简单工厂方法模式-汽车保险  【例2.3】工厂方法模式-汽车保险  【例2.4】抽象工厂模式-房屋信息  【例2.5】生成器模式-房屋信息  【例2.6】单例模式-互联网连接  ...

    过滤器(java编写的过滤器)

    在Java Web开发中,过滤器(Filter)是一种非常重要的技术组件,它可以在请求到达目标资源(如Servlet或JSP页面)之前或之后执行某些操作。...在设计Web应用时,合理利用过滤器,可以有效提升应用的质量和效率。

Global site tag (gtag.js) - Google Analytics