——管道和过滤器体系结构背后的原理是对复杂功能计算的组织以及对关注点的分离——主要目的就是分离关注点
组织结构——管道和过滤器的职能
一个过滤器从它的输入读取数据流,处理这些数据,然后产生数据流到它的输出
管道的实现主要有两种可能:管道可能只起到连接过滤器的作用(如消息调用)或者可能是独立的组件(例如数据知识库或传感器)。管道的唯一责任就是在过滤器之间传输数据,它最后通过把数据从发送者产生的格式转化为接受者要求的格式来实现这个责任。
管道和过滤器体系结构框架基本上是生产者—消费者结构的一种排列。
设计方法学
划分独立子任务——每一个子任务代表一个过滤器,并定义子任务的接口;
确定哪些必须有直接的输入哪些的输入可以从其他的过滤器得到;
确立拓扑结构,哪些可以并行,哪些必须穿行;
确定过滤器之后可以确定过滤器的连接方式——管道;
一个管道可以是从一个过滤器传递到另一个过滤器的一种方法(如消息调用或数据流);
也可以是一个独立的组件(如一个知识库或传感器);
过滤器的拓扑:
可以是简单的穿行结构;
也可以是使用组合模式,将简单的过滤器组合为复杂的拓扑结构。
管道的实现方法:
带参数的过程调用——类似于servlet;
控制组件——centralized的结构,一个控制组件控制全部的过滤器,并组织它们的拓扑结构,决定它们的数据流流动
强化模式——如果管道的任务不只是简单的传递数据,那么需要将管道实现为一种单独的组件,这种结构的实现可以看作为Producer-Repository-Consumer模式
对于管道-过滤器体系结构的设计和实现而言,数据流结构和参数格式的选择至关重要。因为不存在全局的数据结构,所有数据必须从一个组件传送到另外一个组件。
变种
管道系统——过滤器的线性结构
受限管道系统——对一个管道内部可以驻留的数据总量有个限制。
类型化管道系统限制了一个管道上传输的数据必须具有一种特定的数据类型。
Producer-Repository-Consumer模式
优缺点分析
优点:
可重用性,可定制性,可扩展性,可进化性,可测试性;
缺点:
效率——增加了层次结构,因此影响了效率
对流水的支持不够——后一个过滤器必须等待前一个过滤器全部完成才能开始处理,而不是部分完成就能够处理。——通过读写者模式和共享的数据存储区应该可以实现增量处理提高流水,SEDA就可以看做这种模式。
实现
简单实现:Java servlet
复杂实现:SEDA
附录
仲裁者——工作者模式
适配器模式——一个只有两名工作者的仲裁者—工作者结构被称为适配器结构。适配器的主要任务是将消息和数据从发出请求的工作者组件所采用的格式转化为接受它的工作者所需要的格式。
传感器模式——是适配器模式的一个特殊变体。它用来生成从一个特殊接口到一个普通接口的单向协议适配。
生产者——消费者模式
生产者——存储者——消费者模式
生产者——传感器——消费者模式
组织结构——管道和过滤器的职能
一个过滤器从它的输入读取数据流,处理这些数据,然后产生数据流到它的输出
管道的实现主要有两种可能:管道可能只起到连接过滤器的作用(如消息调用)或者可能是独立的组件(例如数据知识库或传感器)。管道的唯一责任就是在过滤器之间传输数据,它最后通过把数据从发送者产生的格式转化为接受者要求的格式来实现这个责任。
管道和过滤器体系结构框架基本上是生产者—消费者结构的一种排列。
设计方法学
划分独立子任务——每一个子任务代表一个过滤器,并定义子任务的接口;
确定哪些必须有直接的输入哪些的输入可以从其他的过滤器得到;
确立拓扑结构,哪些可以并行,哪些必须穿行;
确定过滤器之后可以确定过滤器的连接方式——管道;
一个管道可以是从一个过滤器传递到另一个过滤器的一种方法(如消息调用或数据流);
也可以是一个独立的组件(如一个知识库或传感器);
过滤器的拓扑:
可以是简单的穿行结构;
也可以是使用组合模式,将简单的过滤器组合为复杂的拓扑结构。
管道的实现方法:
带参数的过程调用——类似于servlet;
控制组件——centralized的结构,一个控制组件控制全部的过滤器,并组织它们的拓扑结构,决定它们的数据流流动
强化模式——如果管道的任务不只是简单的传递数据,那么需要将管道实现为一种单独的组件,这种结构的实现可以看作为Producer-Repository-Consumer模式
对于管道-过滤器体系结构的设计和实现而言,数据流结构和参数格式的选择至关重要。因为不存在全局的数据结构,所有数据必须从一个组件传送到另外一个组件。
变种
管道系统——过滤器的线性结构
受限管道系统——对一个管道内部可以驻留的数据总量有个限制。
类型化管道系统限制了一个管道上传输的数据必须具有一种特定的数据类型。
Producer-Repository-Consumer模式
优缺点分析
优点:
可重用性,可定制性,可扩展性,可进化性,可测试性;
缺点:
效率——增加了层次结构,因此影响了效率
对流水的支持不够——后一个过滤器必须等待前一个过滤器全部完成才能开始处理,而不是部分完成就能够处理。——通过读写者模式和共享的数据存储区应该可以实现增量处理提高流水,SEDA就可以看做这种模式。
实现
简单实现:Java servlet
复杂实现:SEDA
附录
仲裁者——工作者模式
适配器模式——一个只有两名工作者的仲裁者—工作者结构被称为适配器结构。适配器的主要任务是将消息和数据从发出请求的工作者组件所采用的格式转化为接受它的工作者所需要的格式。
传感器模式——是适配器模式的一个特殊变体。它用来生成从一个特殊接口到一个普通接口的单向协议适配。
生产者——消费者模式
生产者——存储者——消费者模式
生产者——传感器——消费者模式