我正在尝试为文本处理器编写一些过滤器。我收到一个socket文件,我必须逐行处理。对于每一行,我需要按特定顺序应用一些过滤器。例如,对于一个文件,我将使用过滤器1,过滤器2,过滤器3,然后再使用过滤器2。
我的问题是以特定顺序运行此过滤器的最佳方法是什么以及如何定义它们以便我可以添加更多过滤器而无需更改大量代码?什么是确保高速逐行执行此过滤器的最佳方法?
答案 0 :(得分:1)
我会使用可能的责任链
我假设过滤器说true
(包括/接受线),
或false
(不包括即拒绝此行)。
因此,如果过滤器1返回true
,则链中的多个过滤器链接
然后将该行传递给下一个过滤器2(依此类推)。否则
(如果链中的任何过滤器显示false
),请拒绝该行和
不要检查链中的下一个过滤器。
chain of responsibility pattern
确保高速的最佳方法是什么? 逐行执行此过滤器?
这取决于太多因素所以 很难对此作出回应。
答案 1 :(得分:1)
这与Servlet过滤器非常相似,只是您希望能够多次应用相同的过滤器。
正如其他人建议的责任链可能是合适的,特别是如果过滤器需要能够中止其他过滤器的进一步执行并且需要“周围”控制,即它希望在剩下的之前进行一些处理。链做到了,然后做了一些其他处理。
但对我来说,更重要的是将单个过滤器和链的概念分开,这是链(或序列)中过滤器的排列。
我在考虑使用unix管道。每个Filter
都有自己的意思,不知道输入的来源和消费者的输出。
Controller
组件根据需要创建链,我不知道单个链是否适用于所有文件,或者是否有固定的链组,其中一个链以某种方式为每个文件选择,或者为每个文件创建一个新链。
FilterChain
适用过滤器。如果您正在遵循责任链模式,那么它只需要调用第一个(顶部)过滤器,否则它必须遍历链中的所有过滤器。