关于管道和过滤器的几个问题。
在此示例中,如上图所示,实施时:
换句话说,过滤器将检查是否有数据准备好接收和处理,然后只有1.处理它并且2.将它传递给下一个管道?
答案 0 :(得分:5)
管道和过滤器是 divide-et-impera 的一个应用程序,它采用模块化,旨在通过配置所涉及的模块来实现,并具有多功能性。
在解决涉及源流或对象或信号的多次处理运行的问题时,它找到最有用的,并请求生成修改的流或对象或相同类型的信号。
它基于简单的小处理单元,称为 filter ,它们都遵循相同的契约(它们在输入中获得相同的对象/流类型和可选参数,并返回已处理的流/宾语)。每个滤波器输入可以连接到(另一个或另一个自身实例)滤波器输出,或连接到源(称为 pump ),类似地,每个滤波器输出可以连接到滤波器输入或连接到architecture return object / steam(称为 sink )。连接单元称为 pipe ,并由管理器类用于通过过滤器中完成的不同处理步骤来路由流/对象/信号。
指定合同的协议是每个过滤器可以自动行动,而不需要了解其他过滤器或整个流程处理。这意味着过滤器也可以透明地互换,产生不同的最终结果。
虽然过滤器实例可以在不同的流上同时运行,但管道和过滤器模式通常不用于并发操作,因为每个过滤器通常都需要访问同一个资源。