设计模式——过滤器模式

Posted 纳什奈尔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式——过滤器模式相关的知识,希望对你有一定的参考价值。

过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。


以考试成绩为例,一般写法:

List<student> students

student 小明 = {语文:90; 数学:80;}
student 小红 = {语文:55; 数学:77;}
student 小白 = {语文:99; 数学:50;}

students.add(小明);
students.add(小红);
students.add(小白);

List<student> 语文及格的学生;
List<student> 数学及格的学生;

student.foreach(student => {
    if(student.语文 >= 60){
        语文及格的学生.add(student);
    }

    if(student.数学 >= 60){
        数学及格的学生.add(student);
    }
});

//调用
语文及格的学生;//小明,小白
数学及格的学生;//小明,小红


过滤器模式写法:

List<student> students

student 小明 = {语文:90; 数学:80;}
student 小红 = {语文:55; 数学:77;}
student 小白 = {语文:99; 数学:50;}

students.add(小明);
students.add(小红);
students.add(小白);

语文及格:function(students){
    List<student> list;
    students.foreach(student => {
        if(student.语文 >= 60){
            list.add(student);
        }
        return list;
    });
}

数学及格:function(students){
    List<student> list;
    students.foreach(student => {
        if(student.数学 >= 60){
            list.add(student);
        }
        return list;
    });
}

//调用
语文及格(students);//小明,小白
数学及格(students);//小明,小红


总结:过滤器模式就是把不同过滤条件写成不同的过滤器。

以上是关于设计模式——过滤器模式的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用片段保存夜间模式状态

[07]Go设计模式:过滤器模式(FilterPattern)

csharp C#代码片段 - 使类成为Singleton模式。 (C#4.0+)https://heiswayi.github.io/2016/simple-singleton-pattern-us

设计模式 行为型模式 -- 职责链模式(JDK源码分析:FilterChain(过滤器))

过滤器模式(Filter Pattern)

java 查看寻呼机设计模式与片段。