管道与过滤器风格

在管道/过滤器风格的软件体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。因此,这里的构件被称为过滤器,这种风格的连接件就象是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。此风格特别重要的过滤器必须是独立的实体,它不能与其它的过滤器共享数据,而且一个过滤器不知道它上游和下游的标识。一个管道/过滤器网络输出的正确性并不依赖于过滤器进行增量计算过程的顺序。


  如图是管道/过滤器风格的示意图。一个典型的管道/过滤器体系结构的例子是以Unix shell编写的程序。Unix既提供一种符号,以连接各组成部分(Unix的进程),又提供某种进程运行时机制以实现管道。另一个著名的例子是传统的编译器。传统的编译器一直被认为是一种管道系统,在该系统中,一个阶段(包括词法分析、语法分析、语义分析和代码生成)的输出是另一个阶段的输入。

  管道/过滤器风格的软件体系结构具有许多很好的特点:
  (1)使得软构件具有良好的隐蔽性和高内聚、低耦合的特点;
  (2)允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成;
  (3)支持软件重用。重要提供适合在两个过滤器之间传送的数据,任何两个过滤器都可被连接起来;
  (4)系统维护和增强系统性能简单。新的过滤器可以添加到现有系统中来;旧的可以被改进的过滤器替换掉;
  (5)允许对一些如吞吐量、死锁等属性的分析;
  (6)支持并行执行。每个过滤器是作为一个单独的任务完成,因此可与其它任务并行执行。 
  但是,这样的系统也存在着若干不利因素。
  (1)通常导致进程成为批处理的结构。这是因为虽然过滤器可增量式地处理数据,但它们是独立的,所以设计者必须将每个过滤器看成一个完整的从输入到输出的转换。
  (2)不适合处理交互的应用。当需要增量地显示改变时,这个问题尤为严重。
  (3)因为在数据传输上没有通用的标准,每个过滤器都增加了解析和合成数据的工作,这样就导致了系统性能下降,并增加了编写过滤器的复杂性。

时间: 2024-10-11 16:27:26

管道与过滤器风格的相关文章

面向模式的软件体系结构(3)--管道与过滤器

看了一整晚,不甚理解管道/过滤器.常见的案例Linux命令管道是比较好理解的,但加之混乱的主动/被动的动态概念,就不太好理解了.暂先整理笔记,后面再回顾. 这是看的第2类体系结构,不是有所收获:大致可抽象出一些常见设计的范式 1.体系结构现过程关键点:拆.定义接口/格式.合.出错处理 2.优点关注:重用度  "考虑到一般变更的设计是优秀系统深化的一个主要助推器" [概述] 管道和过滤器(Pipes and Filters)为处理数据流的系统提供了一种结构.每个处理步骤封装在一个过滤器组

chapter9_2 管道与过滤器

一个关于协同程序的经典示例就是“生产者-消费者”的问题. 一个不断产生值,一个不断消费这些值.比如: function producer() while true do local x = io.read() --produce new value send(x) --send it to consumer end end function consumer() while true do local x = receive() --receive value from producer io.

软件体系结构原理、方法与实践总结

第1章:软件体系结构概论 什么是软件危机,软件危机的具体表现有哪些? 软件危机:落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象. 软件危机的表现: 软件成本日益增长,开发进度难以控制,软件质量差,软件维护困难 产生软件危机的原因,如何克服软件危机? 产生软件危机的原因有用户需求不明确,缺乏正确的理论指导,软件规模越来越大,软件复杂度越来越高. 人们面临的不光是技术问题,更重要的是管理问题.要提高软件开发效率,提高软件产品质量,必须采用工程

基于KWIC 的关键字匹配算法(管道+过滤器模式下实现)

下面是基于KWIC 的关键字匹配算法(管道+过滤器模式下实现) 关键部分的管道+过滤器 软件体系下的实现, 在很多的关键字搜索平台都使用了这一 循环移位+排序输出的 关键字匹配算法: 具体需求如下: 1.使用管道-过滤器风格: 每个过滤器处理数据,然后将结果送至下一个过滤器,.要有数据传入,过滤器即开始工作.过滤器之间的数据共享被严格限制在管道传输 四个过滤器: 输入(Input filter): 从数据源读取输入文件,解析格式,将行写入输出管道 移位(CircularShifter filte

常见架构风格

软件架构决策派定义中列举了一系列架构设计阶段需要完成的决策,其中包括“确定架构风格”,那么什么是架构风格?都有哪些常见的架构风格呢? 定义 架构风格定义了一组可以使用的元素类型(比如模块.组件.连接器等),还定义了一组如何使用这些类型的约束,比如系统的实时拓扑结构.模块之间的依赖及组件之间的可视性等. 其实架构风格就和设计模式类似,都是定义了组件及组件之间的关系,不过抽象层次不同而已,因此他们的作用也很类似. 作用 一致性和可理解性:遵循同一个风格得到的结果是一个好主意被彻底的贯彻实施了,而不是

软件体系结构风格

MarShaw和DavidGarlan 中提出的软件体系结构定义为:能够用来具体描述软件系统控制结构和整体组织的一种体系结构,能够表示系统的框架结构,用于从较高的层次上来描述各部分之间的关系和接口. 软件体系结构是对系统的一种高层次的抽象描述.主要是反映拓扑属性,有意忽略细节: 软件体系结构是由构件和构件之间的联系组成,构件又有它自身的体系结构: 构件的描述有3个方面:计算功能.结构特性及其他特性. 从软件体系结构的定义可以看出,软件体系结构主要涉及构件.构件之间的联系与约束.由构件通过相互交互

管道过滤器风格

一.  概述 (个人粗浅之见) 每个系统都有自己的体系结构,每个都和其它的不同.如Windows之于Linux,美国的资本主义三权分立行政制度之于我中国社会主义人民代表大会制度,汽车的内燃机动力系统之于电动车的电机动力系统,......软件是计算机系统这个蔚蓝星球里的里的某个生态系统,丰富多彩的生态系统让这个星球充满了生机与活力.丰富多彩的软件世界里,用户眼里软件的区别也许只是界面不同,功能不同而已,但在设计人员的心中每个软件都是那么独特精巧的存在,每个软件的体系结构,构件,连接,约束,模块,功

从五种架构风格推导出HTTP的REST架构

数据流风格 Data-flow Styles 优点:简单性.可进化性.可扩展性.可配置性.可重用性 复制风格 Replication Styles 优点:用户可察觉的性能.可伸缩性,网络效率.可靠性也可以得到提升 分层风格 Hierarchical Styles 优点:简单性.可进化性.可伸缩性 移动代码风格 Mobile Code Styles 优点:可移植性.可扩展性.网络效率 点对点风格 Peer-to-Peer Styles 优点:可进化性.可重用性.可扩展性.可配置性 管道与过滤器的参

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

建筑模式Christopher Alexander, The Timeless Way of Building, p247, 1979每个模式是一个由三部分组成的规则,表达了特定环境.问题和解(solution)之间的关系.作为现实世界的一个成分,每个模式表达了下列三者之间的一种关系:特定环境,在该环境中反复出现的力(forces)的系统,以及协调这些力的某种空间排列.作为语言的一个成分,每个模式是一条指令,展示了这种空间排列如何被一再重复使用,目的是协调同特定环境相关的力的系统.简单地说,模式