管道--过滤器是一种比较早期的软件设计思路,主要思路是将软件系统看成各种功能模块的组合,功能模块从输入集合读入数据流,并在输出集合产生输出数据流,它最典型的应用是在编译系统。

阅读目标

在本文中,你将获得以下知识:

  • 了解管道-过滤器风格的设计思路
  • 使用该设计风格的时机和原因
  • 案例
  • 管道过滤器风格的优缺点

目录

阅读目标

简介

时机和原因

案例

优缺点

总结


简介

管道-过滤器模式的体系结构是面向数据流的软件体系结构。每个功能模块都有一组输入和输出,功能模块从输入集合读入数据流,并在输出集合产生输出数据流,在系统的构件中计算了一个数据集来产生另外一个数据集。在管道过滤器风格中,功能模块称作过滤器(Filter);功能模块间的链接可以看作输入、输出流之间的通路,所以称作管道(Pipe)。

原因和时机

管道-过滤器风格的特征之一在于过滤器的相对独立性,即过滤器独立完成自身功能,相互之间无需进行状态交互,且各个过滤器之间无需直到它的输入和输出管道所连接的过滤器的存在。每个过滤器仅仅需要对输入管道的输入流数流进行限制,并保证输出管道的输出数据流有合适的内容,并不知道连接在其输入、输出管道上的其他过滤器的实现细节。

使用管道的过滤器的时机在于需要将一个复杂任务拆解为一系列可管理的、离散的服务,并将它们组织成一条管道。在确保每个基本构件的函数满足单一职责原则,特定的输入总是产生相同的输出时,可以创建这样的一个黑盒,将其拼装起来组成的完整软件结构。

管道-过滤器风格的软件体系适合用在并行计算系统上,各个构件之间组成的系统相互独立,不存在数据共享的问题,在并行计算完成之后,各个子系统的结果汇总,就完成了计算任务。在早期的计算机的计算任务中比较常见,计算机只用来做计算,而不考虑系统交互。

案例

编译器就是经典的管道-过滤器风格

编译器模型
  • 预处理:负责宏展开和去掉注释等工作。
  • 编译:进行词法分析、语法分析、语义分析、分析代码优化和代码产生
  • 汇编:负责把汇编代码转换成机器指令,生成目标文件。
  • 链接:负责吧多个目标文件、静态裤和共享链接裤链接成可执行文件、共享库。

如果将编译的过程再次细分下去:

编译构件
  • 词法分析:负责将源程序分解成一个一个的token,这些token是组成源程序的基本单元。
  • 语法分析:把词法分析得到的token解析成语法树。
  • 语义分析:对语法树进行类型检查等语义分析。
  • 代码优化:对语法树进行重组和修改,以优化代码的速度和大小。
  • 代码产生:根据语法树产生汇编代码。

在管道-过滤器风格体系结构的系统中,过滤器不必是原子的,一个过滤器可以分成许多子过滤器,这些子过滤器可以用连接器相互连接起来,例如下面简单例子,在这个例子中,一个字符串可以简单地分成一组单词,这些单词可以按照某种规则组成一个新的字符串,最后将这个新的字符串按字母顺序输出,模型如下所示:

简单的管道过滤器风格实例

大致上而言,整个系统可以分为两个过滤器:分割过滤器和合并过滤器,如果输入一个字符串到这个过滤器中,此时这个字符串将会贝分割为一组单词,然后使出;合并排序过滤器可以从分割过滤器中接收这些输出的数据,再产生出新的字符串。从设计人员和分析人员的角度出发,他们都没有考虑合并排序过滤器是如何工作的,而仅关心过滤器的接口。

优缺点

优点

  1. 支持模块级别的重用,独立的过滤器减少了构件之间的耦合关系
  2. 由管道-过滤器组成的系统能够很容易地维护和扩展。因为此时只要考虑构件的输入、输出和内部实现,通过替换构件可以实现系统的升级,而如果需要扩展系统,添加新功能时,可以在原有构建上接入新的构件。
  3. 在管道过滤器风格中,过滤器构件的独立性提供了系统运行分析的便捷性,例如系统的吞吐量、死锁分析和计算准确性等。
  4. 支持并发计算。

缺点

  1. 过滤器对于输入和输出数据存在一些限制,不适合交互式系统
  2. 仅满足多计算任务的需求,无法实现数据共享。
  3. 过滤器之间进行数据交换需要大量的数据处理空间。

总结

管道-过滤器风格的软件体系,每个构件看成独立的个体。对于相同的输入,每个过滤器都能得到相同的输出结果,过滤器之间通过管道连接起来,就组成了完整的软件系统,系统的升级和扩展即新增过滤器构件。这样的系统只适合多计算任务的需求,而不能用在共享数据、用户交互设计的系统中。

使用管道--过滤器风格设计软件相关推荐

  1. 批处理与管道-过滤器

    三种典型的数据流风格 § Batch Sequential (批处理) § Pipe-and-Filter (管道-过滤器) § Process Control(过程控制,3.7) 批处理风格: 直观 ...

  2. 管道/过滤器架构风格的优点和不足

    管道/过滤器风格的软件架构具有许多很好的特点: (1)使得软构件具有良好的隐蔽性和高内聚.低耦合的特点: (2)允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成: (3)支持软件重 ...

  3. 系统架构设计 2.1 管道-过滤器风格

    一. 管道-过滤风格 过滤器:功能组件 管道:数据流之间的通路 1.2 特点 管道/过滤器结构将数据流处理分为几个顺序的步骤来实现,一个步骤的输出是另一个步骤的输入,每个步骤由一个过滤器来实现 每个过 ...

  4. 管道-过滤器软件架构

    每个构件都有一组输出和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流.因此,这里的构件称为过滤器,这种风格的连接件就像是数据流传输的管道,将一个过滤顺的输出传到另一个过滤器的输入. 一个典 ...

  5. Logstash:在实施之前测试 Logstash 管道/过滤器

    检测解析的日志是否包含单个或多个警告消息,然后添加一个字段来说明这两种情况.在很多的情形下,我们在测试 Logstash 的过滤器时,并不急于把实际的 input 的数据接入到过滤器中来进行测试.我们 ...

  6. 管道 过滤器风格 java_完成基于管道过滤器风格的KWI实现.doc

    完成基于管道过滤器风格的KWI实现.doc 实验2:软件体系结构风格实现 一.实验目的 初步了解不同的体系结构风格 掌握不同体系结构风格的实现 二.实验学时 4学时. 三.实验方法 根据KWIC的描述 ...

  7. 管道-过滤器体系结构风格

    特点:单向流:数据源源不断地产生:有一部分数据产生或处理后立马发往下一个处理构件:可能有缓冲(防止处理速度不一致造成数据丢失) 应用实例:编译器,UNIX管道,图像处理,信号处理等 优点: 1.良好的 ...

  8. 130242014076+陈旭+第3次实验

    一.实验目的 1.理解不同体系结构风格的具体内涵. 2.学习体系结构风格的具体实践. 二.实验环境 硬件: (依据具体情况填写) 软件:Java或任何一种自己熟悉的语言 三.实验内容 "上下 ...

  9. 【软考软件评测师】2020年下综合知识历年真题

    [软考软件评测师]2020年下综合知识历年真题 [2020年评测真题第01题:绿色] 01.信息系统进入使用阶段后,主要任务是( ). A.进行信息系统开发与测试 B.进行信息系统需求分析 C.对信息 ...

  10. 282.软件体系结构的风格与模式

    建筑模式 Christopher Alexander, The Timeless Way of Building, p247, 1979 每个模式是一个由三部分组成的规则,表达了特定环境.问题和解(s ...

最新文章

  1. 基础知识——变量和简单数据类型(一)
  2. ajax提交相对路径报错,ajax提交请求为啥url要用这个函数encodeURI
  3. 三座”大山“或让谷歌无人机送货项目被冻结
  4. 03-CoreData原理
  5. poj 1611 TheSuspects 并查集 连通图
  6. 【MySQL】MySQL SQL查询语法建议
  7. 2、Qt Project之鼠标事件监控
  8. 看我!挖到了一个3万美元的 Instagram 漏洞
  9. 基于 Mean-shift的稳健性可视跟踪研究
  10. Python_继承_构造函数
  11. 读Ext之九(事件管理)
  12. Adb connection Error: adb关闭,adb重启。BUG
  13. windows设置自动获取IP地址
  14. 微机大作业—— 24秒倒计时器
  15. 保研面试/考研复试英语口语常见问题整理
  16. 12点转成0点(原因时间格式化为十二小时制导致)
  17. 用户画像系列——推荐相关核心标签(偏好类)
  18. 使用gdiplus显示gif图片
  19. win7系统无法开启telnet服务器,win7系统telnet出现错误怎么办?win7系统开启telnet出错的修复教程...
  20. 简述数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型

热门文章

  1. 云控微信开发SDK使用教程--微信联系人标签新增,修改通知服务端
  2. 如何使用gdb调试java虚拟机_Eclispe+qemu+gdb调试linux Kernel
  3. 信息系统项目管理师考试后多久出成绩?
  4. java 继承作用_理解java的三大特性之继承
  5. Simulink中利用Powergui进行FFT分析,但是信号源始终为空
  6. java分发_【Java】用注解实现分发器
  7. B.FRIENDit壁虎忍者品牌故事
  8. es入门以及索引原理学习
  9. 在阿里云建网站体验123
  10. 源地址转换、目的地址装换