软件架构模式之管道-过滤器模式--分析

  在管道-过滤器架构模式中,每个构件都有一组输入,输出,构件读取输入的数据流,经过内部处理后,产生输出数据流,该过程主要完成输入流的变换及增量计算。这里的构件就是过滤器,而连接过滤器的就是管道,这个管道将上一个过滤器处理的结果数据流传送到下一个过滤器,在进行其他的计算。

  简单来说,管道-过滤器模式结构就像是一条产品加工流水线,原材料在流水线上经过一个个工人的加工,最终生产出产品。这里的工人就是过滤器,将材料进行加工,流水线中的传送带就是管道,将一个工人加工过得材料传送给下一个工人继续加工。

  

      

应用场景

  1.由一个应用程序所需的处理可以很容易地被分解成一组离散的,独立的步骤。
  2.由应用程序执行的处理步骤具有不同的可扩展性要求。

优势

  (1)使得构件具有良好的隐蔽性和高内聚、低耦合的特点;

  (2)允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成;

  (3)支持软件重用。重要提供适合在两个过滤器之间传送的数据,任何两个过滤器都可被连接起来;

  (4)系统维护和增强系统性能简单。新的过滤器可以添加到现有系统中来;旧的可以被改进的过滤器替换掉;

  (5)允许对一些如吞吐量、死锁等属性的分析;

  (6)支持并行执行。每个过滤器是作为一个单独的任务完成,因此可与其它任务并行执行;

案例

  编译器就是基于管道过滤器模式设计的:

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

  编译器的每个步骤都是相互分离的,可以独立存在,每个步骤完成之后得到的结果交给下一个步骤进行处理,每一步的处理之间都依靠输入输出的数据流来维系关系,正好符合管道-过滤器模式,并且每个处理都只是依赖上一步处理的结果,并不依赖处理过程,所以程序的耦合度很低,内聚性很高,每一步都有很高的扩展性。

原文地址:https://www.cnblogs.com/Zhanghaonihao/p/9097034.html

时间: 2024-11-20 06:36:14

软件架构模式之管道-过滤器模式--分析的相关文章

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

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

管道-过滤器模式

如果项目中的功能要求需要经过一系列的处理.可以采用管道-过滤器模式组织这些处理.每一个处理就是一个过滤器.组织过滤器的管线对象就是管道. 管道模式适用于一系列确定/已知的步骤处理. 原始的管道模型可以像下面这样: /// <summary> /// 处理消息 /// </summary> public abstract class Context { } /// <summary> /// 过滤器 /// </summary> /// <typepar

设计模式学习系列——过滤器模式

过滤器模式 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来.这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准. 故名思意,就是将原始数据经过不同规则的筛选得到想要的数据. 角色:1)待过滤数据类:2)过滤器:3)逻辑过滤器:4)使用者 最近在找工作,这真是一个活生生被过滤的例子啊.于是以找工作,和公司各种过滤条件为例,详见代码(php版本

【设计模式】过滤器模式

过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来.这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准. 实现 我们将创建一个 Person 对象.Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表.CriteriaPatternDemo,我们的演示类使用 Criteria 对象,基于各种标准和它们的结合来过滤 Pe

在服务器端采用同步处理模式和异步处理模式的分析

同步服务为每个请求创建单一线程,由此线程完成请求任务:接收消息,处理消息,返回数据:这种情况下服务器资源对所有入栈请求开放,服务器资源被所有入栈请求竞争使用,如果入栈请求过多就会导致服务器资源耗尽宕机,或者导致竞争加剧,资源调度频繁,服务器资源利用效率降低. 异步服务则可以分别设置两个线程队列,一个专门负责接收消息,另一个专门负责处理消息并返回数据,另有一些值守线程负责任务派发和超时监控等工作.在这种情况下无论入栈请求有多少,服务器始终依照自己的能力处理请求,服务器资源消耗始终在一个可控的范围.

正确的输入——过滤器模式

在建造者模式中动态创建表单时,用户的输入是任意的,显然这是不允许的,我们需要过滤掉用户不合理的输入并加以提示,过滤器模式允许开发人员通过不同的标准过滤一组对象,并通过逻辑运算将他们连接起来. 实例中根据表单的要求,设计输入为空过滤器,邮箱格式过滤器,长度过滤器,并根据用户的输入给出结果,其类图结构如下: 代码实现: var Filter = Class.extend({ controls:[], ctor:function(_controls = []){ this.controls = _co

五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O

五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O 五种I/O 模式:[1]        阻塞 I/O           (Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O)[2]        非阻塞 I/O        (可以通过fcntl或者open时使用O_NONBLOCK参数,将fd设置为非阻塞的I/O)[3]        I/O 多路复用     (I/O

Java设计模型应用——过滤器模式

storm引擎计算出一批中间告警结果,会发送一条kafka消息给告警入库服务,告警入库服务接收到kafka消息后读取中间告警文件,经过一系列处理后把最终告警存入mysql中. 实际上,中间告警结果可能有重复告警.错误告警.无用告警,告警入库服务会过滤,压缩中间告警,把用户关心的告警存入数据库.过滤的步骤较多,并且客户关心的告警可能会随时变化,写死的告警过滤很快就无法满足应用场景,这种场景下使用过滤器模式则很好满足业务上的不确定性欲扩展性. 告警入库服务涉及消息过滤和告警过滤,下面我们以消息过滤器

UML和模式应用-1面向对象的分析与设计

1.本书的主要内容 UML和面向对象的思想 对应用了UML和模式的面向对象分析与设计(OOA/D)的介绍 重点阐述对象设计,也会讲述在OOA/D中如何使用UML OOD的原则和模式 职责驱动设计 模式,问题解决方案公式 案例研究 贯穿全书的案例研究 用例 讲述需求分析 迭代开发 迭代开发使用统一过程(UP)的敏捷方法作为示例迭代过程来讲述迭代开发 TODO