管道模式(Pipeline
Pattern)是一种常见的设计模式,它可以将多个处理器(Processor)组合在一起,形成一个管道,让数据可以在这个管道中流动。每个处理器都负责对数据进行一定的处理,并将处理结果传递给下一个处理器,最终得到最终结果。
管道的实现方式很多种,下面介绍一种
首先,需要一个基类处理器 Processor
class Processor:
def __init__(self):
self.next_processor = None
def process(self, data):
raise NotImplementedError()
def set_next(self, processor):
processor.next_processor = self
return processor
基于这个基类定义三个具体处理器,就以对数据的预处理,过滤,后置处理为例,代码如下
class Preprocessor(Processor):
def process(self, data):
# 数据预处理
data = data.strip().lower()
return self.next_processor.process(data)
class Filter(Processor):
def process(self, data):
# 数据过滤
if data == "stop":
return None
return self.next_processor.process(data)
class Postprocessor(Processor):
def process(self, data):
# 数据后处理
data = data.upper()
return data
最后,我们可以将这三个处理器组合在一起,形成一个管道
pipeline = Postprocessor().set_next(Filter()).set_next(Preprocessor())
这个管道的顺序是:Preprocessor -> Filter -> Postprocessor。数据会从Preprocessor开始流动,经过Filter和Postprocessor的处理,最终得到最终结果
测试
测试1
result = pipeline.process(" stop ")
print(result)
结果
None
测试2
result = pipeline.process(" Hello ")
print(result)
结果
HELLO
其实从上面例子中看起挺像责任链模式,两者都是用于处理数据的模式,但两者还是有一些细微的不同
在应用场景上,责任链模式适用于处理复杂的请求,例如在一个Web框架中,每个中间件都可以处理请求,如果当前中间件不能处理请求,则将请求传递给下一个中间件。而管道模式则适用于处理流式数据,例如在一个数据处理系统中,每个处理器都可以对数据进行一定的处理,最终得到最终结果
欢迎关注,学习不迷路