我是靠谱客的博主 含糊海燕,最近开发中收集的这篇文章主要介绍Java过滤器模式Java过滤器模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java过滤器模式

介绍

什么是过滤模式?

比如水泥制造, 沙子是用来混水泥的,如果沙子中大的石头太多那么混出来的水泥就不行很容易就裂了,所以在混水泥前需要使用过滤网将沙子中的大石块给过滤掉 而我们今天学的过滤器就好比就是这过滤沙子的过滤网

比如: 有一万个女方相亲的信息 那么有一个男的来相亲 他说我需要xxx条件的 女方信息 那么我们就可以通过,过滤来将不需要的信息过滤掉显示给男方满足条件的女方信息

案例

我们下面这个案例主要就是过滤 ( 性别, 单身 ) 至于其他的过滤都可参考这个案例来写

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

filtraCriteria 过滤接口

//过滤接口
public interface filtraCriteria {
    //传入需要过滤的内容
    public List<Person> meetCriteria(List<Person> persons);
}

实现过滤接口的实现类 CriteriaFemale

//过滤类
public class CriteriaFemale implements filtraCriteria {
    //放行 性别为女的
    @Override
    public List<Person> meetCriteria(List<Person> persons) {
        List<Person> femalePersons = new ArrayList<Person>();
        persons.stream()
                .filter(gender -> gender.getGender().equalsIgnoreCase("女"))
                .forEach(femalePersons::add);

        return femalePersons;
    }
}

实现过滤接口的实现类 CriteriaMale

//过滤类
public class CriteriaMale implements filtraCriteria {
    //放行 性别为男的
    @Override
    public List<Person> meetCriteria(List<Person> persons) {
        List<Person> malePersons = new ArrayList<Person>();

        persons.stream()
                .filter(gender->gender.getGender().equalsIgnoreCase("男"))
                .forEach(malePersons::add);

        return malePersons;
    }
}

实现过滤接口的实现类 CriteriaSingle

//过滤类
public class CriteriaSingle implements filtraCriteria {
    //放行  是单身的
    @Override
    public List<Person> meetCriteria(List<Person> persons) {
        List<Person> singlePersons = new ArrayList<Person>();
        persons.stream()
                .filter(maritalStatus->maritalStatus.getMaritalStatus().equalsIgnoreCase("单身"))
                .forEach(singlePersons::add);

        return singlePersons;
    }
}

实现过滤接口的组合实现类 AndCriteria

//组合过滤类   并且
public class AndCriteria implements filtraCriteria {

    private filtraCriteria criteria;
    private filtraCriteria otherCriteria;

    public AndCriteria(filtraCriteria criteria, filtraCriteria otherCriteria) {
        this.criteria = criteria;
        this.otherCriteria = otherCriteria;
    }

    @Override
    public List<Person> meetCriteria(List<Person> persons) {
        List<Person> firstCriteriaPersons = criteria.meetCriteria(persons);
        List<Person> people = otherCriteria.meetCriteria(firstCriteriaPersons);
        return people;
    }
}

我们上面实现了 两个过滤类的组合 当然 三个 四个都行 看你自己设计了

实现过滤接口的组合实现类 OrCriteri

//组合过滤类   或者
public class OrCriteria implements filtraCriteria {

    private filtraCriteria criteria;
    private filtraCriteria otherCriteria;

    public OrCriteria(filtraCriteria criteria, filtraCriteria otherCriteria) {
        this.criteria = criteria;
        this.otherCriteria = otherCriteria;
    }

    @Override
    public List<Person> meetCriteria(List<Person> persons) {
        List<Person> firstORother=new ArrayList<>();


        List<Person> firstCriteriaItems = criteria.meetCriteria(persons);
        firstCriteriaItems.stream().forEach(firstORother::add);

        List<Person> otherCriteriaItems = otherCriteria.meetCriteria(persons);
        otherCriteriaItems.stream().forEach(firstORother::add);

        return  firstORother;
    }
}

测试 CriteriaPatternDemo

public class CriteriaPatternDemo {
    //遍历集合中信息
    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()
                    +" ]");
        }
    }

    public static void main(String[] args) {
        //-------------------需要过滤的信息----------------------------------------
        List<Person> persons = new ArrayList<Person>();
        persons.add(new Person("Robert","男", "单身"));
        persons.add(new Person("John","男", "已婚的"));
        persons.add(new Person("Laura","女", "已婚的"));
        persons.add(new Person("Diana","女", "单身"));
        persons.add(new Person("Mike","男", "单身"));
        persons.add(new Person("Bobby","男", "单身"));
// ------------------创建过滤条件类--------------------
        filtraCriteria male = new CriteriaMale();  //放行性别 男
        filtraCriteria female = new CriteriaFemale(); //放行性别 女
        filtraCriteria single = new CriteriaSingle();  //放行 单身
//--------------------创建组合过滤类-----------------------------
        filtraCriteria singleMale = new AndCriteria(single, male);   //放行单身 并且 性别为男
        filtraCriteria andCriteria=new AndCriteria(single, female);//放行单身 并且 性别为女
        filtraCriteria singleOrFemale = new OrCriteria(single, female); //放行单身 或者性别为女
//-------------------打印过滤后的 信息-------------------
        System.out.println("男的: ");
        printPersons(male.meetCriteria(persons));
        System.out.println("n女的: ");
        printPersons(female.meetCriteria(persons));

        System.out.println("n单身 男的: ");
        printPersons(singleMale.meetCriteria(persons));

        System.out.println("n单身  女的 ");
        printPersons(andCriteria.meetCriteria(persons));

        System.out.println("n单身 或者 女的: ");
        printPersons(singleOrFemale.meetCriteria(persons));


    }


}

男的:
Person : [ Name : Robert, Gender : 男, Marital Status : 单身 ]
Person : [ Name : John, Gender : 男, Marital Status : 已婚的 ]
Person : [ Name : Mike, Gender : 男, Marital Status : 单身 ]
Person : [ Name : Bobby, Gender : 男, Marital Status : 单身 ]

女的:
Person : [ Name : Laura, Gender : 女, Marital Status : 已婚的 ]
Person : [ Name : Diana, Gender : 女, Marital Status : 单身 ]

单身 男的:
Person : [ Name : Robert, Gender : 男, Marital Status : 单身 ]
Person : [ Name : Mike, Gender : 男, Marital Status : 单身 ]
Person : [ Name : Bobby, Gender : 男, Marital Status : 单身 ]

单身 女的
Person : [ Name : Diana, Gender : 女, Marital Status : 单身 ]

单身 或者 女的:
Person : [ Name : Robert, Gender : 男, Marital Status : 单身 ]
Person : [ Name : Diana, Gender : 女, Marital Status : 单身 ]
Person : [ Name : Mike, Gender : 男, Marital Status : 单身 ]
Person : [ Name : Bobby, Gender : 男, Marital Status : 单身 ]
Person : [ Name : Laura, Gender : 女, Marital Status : 已婚的 ]
Person : [ Name : Diana, Gender : 女, Marital Status : 单身 ]

点赞 -收藏-关注-便于以后复习和收到最新内容
有其他问题在评论区讨论-或者私信我-收到会在第一时间回复
如有侵权,请私信联系我
感谢,配合,希望我的努力对你有帮助^_^

最后

以上就是含糊海燕为你收集整理的Java过滤器模式Java过滤器模式的全部内容,希望文章能够帮你解决Java过滤器模式Java过滤器模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部