zoukankan      html  css  js  c++  java
  • 管道-过滤器模式

      管道-过滤器模式的体系结构是面向数据流的软件体系结构。它最典型的应用是在编译系统。一个普通的编译系统包括词法分析器,语法分析器,语义分析与中间代码生成器,优化器,目标代码生成器等一系列对源程序进行处理的过程。人们可以将编译系统看作一系列过滤器的连接体,按照管道-过滤器的体系结构进行设计。此外,这种体系结构在其它一些领域也有广泛的应用。因此它成为软件工程和软件开发中的一个突出的研究领域。

    管道-过滤器模式组成

    1 过滤器

    过滤器按照对流经它的数据操作的不同,可分为3类过滤器:输入过滤器,处理过滤器和输出过滤器。下面将对这三类过滤器进行介绍。

    (1)输入过滤器

    输入过滤器处在问题所在的外部世界与软件系统的边界处,是系统数据流的源点。它负责接收外界信息并转化为系统所需的数据流。

    (2)处理过滤器

    处理过滤器是系统内变换数据流的部件,它有一个入口和一个出口,数据经入口流入,经过处理过滤器内部处理之后从出口流出。

    (3)输出过滤器

    从建立完备的,首尾一致的可重用的软件部件组的角度出发,正如输入过滤器是系统数据流的起点,那么输出过滤器是数据流的终点。

    过滤器的实现还须满足以下三条基本原理:

    随后的处理单元从过滤器中拉出输出数据;

    前面的处理单元把新的输入数据压入过滤器;

    过滤器以循环工作的方式,从流水线中拉出其输入数据并且将其输出数据压入流水线。过滤器按照以上三种情况可分为两类:主动过滤器和被动过滤器。满足前两种情况的过滤器称为被动过滤器,满足最后一种情况的过滤器称为主动过滤器。

    2 管道

    管道作为过滤器之间数据流动的通道的软件部件,它的主要功能是连接各个过滤器,充当过滤器之间数据流的通道。管道具有数据缓冲以及提高过滤器之间的并行性操作的作用。管道由数据缓冲区,向数据缓冲区读和写数据,判断管道为空或已满等操作定义组成

    模式优缺点

    优点

     

    (1)管道-过滤器模型有如下的优点: 设计人员将整个系统的输入输出行为理解为单个过滤器行为的叠加与组合。这样可以将问题分解,化繁为简。

     

    (2)任何两个过滤器,只要它们之间传送的数据遵守共同的规约就可以相连接。每个过滤器都有自己独立的输入输出接口,如果过滤器间传输的数据遵守其规约,只要用管道将它们连接就可以正常工作。


     

    (3)整个系统易于维护和升级:旧的过滤器可以被替代,新的过滤器可以添加到已有的系统上。软件的易于维护和升级是衡量软件系统质量的重要指标之一,在管道-过滤器模型中,只 要遵守输入输出数据规约,任何一个过滤器都可以被另一个新的过滤器代替,同时为增强程序功能,可以添加新的过滤器。这样,系统的可维护性和可升级性得到了保证。

     

    (4)支持并发执行:每个过滤器作为一个单独的执行任务, 可以与其它过滤器并发执行。过滤器的执行是独立的,不依赖于其它。

    缺点

    1. 不适合处理交互的应用。
    2. 传输的数据没有标准化,所以读入数据和输出数据存在着格式转换等问题,会导致性能的降低。

    模式使用的环境

    一个应用程序可能需要执行各种关于它处理的信息不同复杂的任务。一个简单,但不灵活的方式来实施这个应用程序可以执行此处理为单一模块。然而,这种方法有可能减少用于重构代码,对其进行优化,或者重新使用它,如果是在应用程序中其他地方所需要的相同的处理的部件的机会。

    问题

      软件由多个复杂的处理流程组成,每个处理有自己独特的处理逻辑,流程不容易控制,每个流程的输出不容易得到及时的反馈,编写代码较为复杂,处理流程混乱,不容易形成体系结构,不容易进行任务的分解与分工,而且代码不容易测试及维护。

    解决方案

      采用管道-过滤器模式进行软件体系结构的设计。软件由多个独立的处理刘才能组成,则将每个处理流程当做一个过滤器,过滤器是由一个输入接口、一个处理模块和一个输出接口组成,而且是一个独立的实体。满足处理过程的独立处理,接受输入和输出的要求。而且过滤器有自己的处理机制,可以对所有的输入都进行处理,还可以对一部分数据进行处理,还可以进行数据的检测,当数据不满足要求时,可以及时地做出回应,进行错误处理。而且管道作为数据的传输介质在过滤器之间进行数据的传输,很好地满足了流程的处理。同时在满足系统要求的情况下很好地满足了代码的分解,形成了很多独立的过滤器模块,使软件代码解耦合,做到了高内聚、低耦合的设计原则,所以很容易进行测试和维护,在某些过滤器需要替换或删除时,可以很好地进行操作,而不需要修改太多的代码,而且也不会影响到其他的过滤器,同时过滤器还可以重用。提高了代码的可重用性。所以通过应用管道-过滤器模式可以很好地解决软件需要进行流程处理的需求。

     

  • 相关阅读:
    oracle如何去除字符串中的重复字符
    MySQL的几个概念:主键,外键,索引,唯一索引
    从头学Qt Quick(3)-- 用QML写一个简单的颜色选择器
    [0x01 用Python讲解数据结构与算法] 关于数据结构和算法还有编程
    [0x00 用Python讲解数据结构与算法] 概览
    从头学Qt Quick(2)-- QML语法从一个简单的例子说起
    从头学Qt Quick(1) --体验快速构建动态效果界面
    Linux下U盘变成只读
    Qt Creator 黑色主题配置
    Qt5 从头学(2)--手动构建HelloWold
  • 原文地址:https://www.cnblogs.com/zhouzh/p/9087975.html
Copyright © 2011-2022 走看看