管道与过滤器

管道与过滤器架构风格是一种数据流领域架构风格,适用于数据需按阶段处理的应用领域,如编译器、网络传输和仿真系统。该风格强调各模块的高内聚和松耦合,便于模块重用和系统扩展。

前言

当一个行业专家解决一个特定问题时,很少完全创新出一个全新的方案,更多是采用类似问题的方案来解决新问题。

在对特定应用领域的系统架构方法的抽象总结,我们称之为系统架构风格,与设计模式类似,但层次比设计模式高,设计模式用于解决子系统或组件的实现,而系统架构风格用于描述如何划分组件及组件之间如何协作。

管道与过滤器架构风格属于数据流领域架构风格:数据在系统中经过各阶段处理,并最终给出结果的应用领域。

简介

系统架构定义:描述构件及构件之间的协作关系,在管道与过滤器架构中,将构件描述为过滤器,构件与构件之间的连接称为管道

过滤器负责接收数据,处理数据及输出数据,各过滤器之间由管道连接

过滤器有以下几个特点:

  1. 相互之间不共享状态
  2. 对连接的过滤器不感知
  3. 相互可独立执行,支持并行
  4. 过滤器的计算正确性与各个过滤器的执行顺序无关,只与自身的输入数据有关。
  5. 过滤器相互之间是否可通过管道连接,取决于传输的数据是否可被识别

管道:负责传输数据。

 

系统体系图

 

适用场景

管理与过滤器架构风格属于数据流架构体系,适合于处理数据需按阶段处理的应用领域,数据在一个处理阶段中处理,前一个处理阶段的输出被后一个阶段接收并处理,

常见的示例:

编译器

在代码编码过程中,编译器需执行词法分析阶段,句法分析阶段,语义分析阶段,代码生成阶段,每一个阶段的输出作为后一阶段的输入。

网络传输

在网络中计算机之间的数据通信也可以看成是管道与过滤器,计算机发送的数据通过应用程,表示层,会话层,网络层,数据链路层,物理层,层层处理后发送到对方计算机。

OTS仿真

在OTS仿真系统中,设备通过物质流传递数据,

优点

各模块高内聚,松耦合

各模块可重用

方便更新或加入新的过滤器,扩展系统功能

易于理解,可将系统看成是各过滤器的简单叠加

系统特定问题如死锁,吞吐量等容易分析

各过滤器相互独立,可支持并行

缺点

在复杂系统中,若过滤器之间存在相互的关系,需要设计协调相互之间的计算顺序

若各过滤器传输的数据没有统一的规范,各过滤器则需要做加密解析等操作,降低了性能

参考系统体系图发现没有统一的共享数据区,因此不能提供任务处理进度,了解各阶段的处理细节。

实现技巧

由于各过滤器之间相互独立计算,计算的结果只与输入有关,因此在协作时,需根据过滤器的依赖关系,设计好计算拓扑图,根据拓扑图来保证过滤器的计算顺序,保证计算正确。

管道过滤器模式是设计模式中的一种,以管道过滤器的方式处理数据流,它将数据处理过程分解为一系列独立的、可重复使用的组件,每个组件只关注单一职责,这种结构使系统易于维护,也便于扩展和重用,是软件架构中常见的数据处理模式[^1]。 管道模式和过滤器模式在使用上存在区别。管道模式更关注数据的顺序处理和逐步转换,每个步骤都是必要的,且按照预定的顺序执行,适用于需要将数据通过一系列固定步骤进行处理的场景;过滤器模式则更强调根据特定条件对数据进行筛选和过滤,过滤器的组合和顺序可按需调整,适用于需要根据不同条件对数据进行动态筛选和处理的场景[^2]。 管道 - 过滤器模式的特点是把一系列定制化需求转换成类似数据流的处理方式,数据通过管道流经一系列过滤器,在每个过滤器中完成特定的业务逻辑。每个过滤器独立完成自身职责,不依赖其他过滤器,这种特性使系统扩展性得到极大提升,可容易地对现有过滤器进行替换,动态添加和删除过滤器也不会影响整个处理流程[^4]。 以下是一个Python实现的简单示例代码,用于演示如何创建管道并添加过滤器来处理数据: ```python class Pipeline: def __init__(self): self.filters = [] def add_filter(self, filter): self.filters.append(filter) def run(self, data): for filter in self.filters: data = filter.process(data) return data class UpperCaseFilter: def process(self, data): return data.upper() class ReverseFilter: def process(self, data): return data[::-1] class LowerCaseFilter: def process(self, data): return data.lower() if __name__ == "__main__": # 初始化管道 pipeline = Pipeline() # 添加过滤器 pipeline.add_filter(UpperCaseFilter()) pipeline.add_filter(ReverseFilter()) pipeline.add_filter(LowerCaseFilter()) # 运行管道 input_data = "Hello, World!" output_data = pipeline.run(input_data) print(f"原始数据: {input_data}") print(f"处理后的数据: {output_data}") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值