过滤器模式主要包含以下几个角色:
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/设计模式