Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 定义过滤器顺序_Java_Design Patterns - Fatal编程技术网

Java 定义过滤器顺序

Java 定义过滤器顺序,java,design-patterns,Java,Design Patterns,我正在尝试为文本处理器编写一些过滤器。我从一个套接字接收我必须逐行处理的文件。对于每一行,我需要按照特定的顺序应用一些过滤器。例如,对于一个文件,我将使用过滤器1、过滤器2、过滤器3,然后再使用过滤器2 我的问题是,以特定顺序运行此过滤器的最佳方式是什么,以及如何定义它们,以便我可以添加更多过滤器而无需更改大量代码?确保快速逐行执行此过滤器的最佳方法是什么?我可能会使用责任链。 我假设一个过滤器显示true(包括/接受行), 或false(不包括,即拒绝此行) 因此,如果过滤器1返回true,

我正在尝试为文本处理器编写一些过滤器。我从一个套接字接收我必须逐行处理的文件。对于每一行,我需要按照特定的顺序应用一些过滤器。例如,对于一个文件,我将使用过滤器1、过滤器2、过滤器3,然后再使用过滤器2


我的问题是,以特定顺序运行此过滤器的最佳方式是什么,以及如何定义它们,以便我可以添加更多过滤器而无需更改大量代码?确保快速逐行执行此过滤器的最佳方法是什么?

我可能会使用责任链。
我假设一个过滤器显示
true
(包括/接受行),
false
(不包括,即拒绝此行)

因此,如果过滤器1返回
true

然后将该线传递到下一个过滤器2(依此类推)。否则
(如果链中的任何筛选器显示
false
),则拒绝该行并
不要使用链中的下一个过滤器进行检查

确保高速运行的最佳方法是什么
逐行执行此过滤器

这取决于太多因素,因此

很难对此作出回应

这与Servlet过滤器非常相似,只是您希望能够多次应用相同的过滤器

正如其他人所建议的那样,责任链可能是合适的,特别是如果一个过滤器需要有能力中止其他过滤器的进一步执行,并且需要一个“环绕”控制,即它想在链的其他部分做它的事情之前做一些处理,然后再做一些其他处理

但对我来说,似乎更重要的是将单个过滤器和一个链的概念分开,这个链是过滤器在一个链(或序列)中的排列方式。

我正在考虑unix管道。每个
过滤器
都做自己的事情,而不知道其输入来自何处以及谁使用其输出

一个
控制器
组件根据需要创建链,我不知道是单个链适用于所有文件,还是存在一组固定的链,每个文件以某种方式选择一个链,或者为每个文件创建一个新链


FilterChain
应用过滤器。如果您遵循责任链模式,那么它只需调用第一个(顶部)过滤器,否则它必须迭代链中的所有过滤器。

责任链是我的第一个想法,但只要所有过滤器都必须执行,我不知道这是否是最佳方法。我的问题不够清楚。筛选器不接受或拒绝行。也许合适的单词应该是规范化器,因为它们在替换单词、符号、纠正语法等的行上工作。这个链的速度必须很高,因为我必须实时处理数千行,所以我不想在缓慢的迭代循环中浪费时间。如果主要关注的是速度,那么我宁愿看一些好的算法(基于我想在线路上执行的操作),而不是设计模式。只有在我决定了算法之后,我才会寻找一种特定的设计模式。如果你想在这一部分得到更好的回答,你应该提供这些行操作的更多细节,或者发布一个新问题。我已经写了另一个问题。我认为现在解释得更好。如果你能看一看,我将不胜感激