目录

结构型:过滤器模式

释义

过滤器模式,运用不同标准的过滤器筛选出数据。

/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%BF%87%E6%BB%A4%E5%99%A8%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%EF%BC%9A%E8%BF%87%E6%BB%A4%E5%99%A8%E6%A8%A1%E5%BC%8F.resources/DFC597C4-602E-4CCD-B776-82D70EF95514.png
过滤器模式
MaleFemale是两个过滤器,分别用于筛选男性和女性。List<Person>传入两个过滤器后,分别筛选出相应结果。

过滤器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
interface Filter {
    fun filteBySex()
}

class Male : Filter {
    override fun filteBySex(persons: List<Person>): List<Person> {
        val men: List<Person> = List<Person>()
        for(person in persons) {
            if(person.isMale()) {
                men.add(person)
            } else {
                // do Nothing
            }
        }
        return men
    }
}

class Female : Filter {
    override fun filteBySex(persons: List<Person>): List<Person> {
        val women: List<Person> = List<Person>()
        for(person in persons) {
            if(person.isFemale()) {
                women.add(person)
            } else {
                // do Nothing
            }
        }
        return women
    }
}

使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
fun main() {
    // 初始化数据
    val persons: List<Persons> = List<Persons>
    persons.add(object : Person("male"))
    persons.add(object : Person("female"))
    ...
    persons.add(object : Person("female"))
    
    // 创建过滤器
    val male: Male = Male()
    
    // 过滤
    persons = Male().filteMale(persons)
}