过滤器模式(Filter Pattern)是一种结构型设计模式,它允许通过一系列条件来过滤复杂对象,提取出满足特定条件的子集。

过滤器模式主要包含以下几个角色:

1. 过滤器接口(Filter): 定义了过滤器的接口,通常包含一个用于过滤的方法。
2. 具体过滤器(ConcreteFilter): 实现了过滤器接口,包含实际的过滤逻辑。
3. 过滤器链(Filter Chain): 包含多个过滤器,按照一定顺序组织起来,形成一个过滤器链。
4. 目标对象(Target): 表示需要过滤的复杂对象。
5. 客户端(Client): 使用过滤器链来过滤目标对象。

以下是一个简单的 Python 示例,演示了过滤器模式用于过滤人员列表的应用:
# 过滤器接口
class Filter:
    def apply(self, persons):
        pass

# 具体过滤器:过滤年龄大于等于18的人员
class AdultFilter(Filter):
    def apply(self, persons):
        return [person for person in persons if person.age >= 18]

# 具体过滤器:过滤年龄小于18的人员
class MinorFilter(Filter):
    def apply(self, persons):
        return [person for person in persons if person.age < 18]

# 目标对象
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

# 过滤器链
class FilterChain:
    def __init__(self):
        self.filters = []

    def add_filter(self, filter):
        self.filters.append(filter)

    def apply(self, persons):
        result = persons
        for filter in self.filters:
            result = filter.apply(result)
        return result

# 客户端
persons = [Person("Alice", 25), Person("Bob", 17), Person("Charlie", 30)]

filter_chain = FilterChain()
filter_chain.add_filter(AdultFilter())
filter_chain.add_filter(MinorFilter())

result = filter_chain.apply(persons)
for person in result:
    print(f"{person.name}, {person.age} years old")

在这个示例中,Filter 是过滤器接口,AdultFilter 和 MinorFilter 是具体过滤器。Person 是目标对象,表示人员信息。FilterChain 是过滤器链,包含了多个过滤器,并按照一定顺序应用这些过滤器。

客户端创建一个包含人员信息的列表,然后将该列表传递给过滤器链,过滤器链根据过滤器的逻辑对人员进行过滤。最后,客户端打印出过滤后的结果。

过滤器模式使得过滤条件可以灵活组合,并且可以轻松地添加新的过滤器,同时保持了客户端代码的简洁性。这种模式在需要进行复杂条件过滤的场景中非常有用。


转载请注明出处:http://www.zyzy.cn/article/detail/13944/设计模式