假设我有这样的processElement
函数:
class InputProcessor {
public void processElement(T element) {
nextOperator.processElement(element);
}
}
现在,我想添加一个开/关开关,以在“开关打开”期间对元素进行计数。但是我不想添加这样的“ if else”,因为它可能会降低性能。
class InputProcessor {
public void processElement(T element) {
if (on) {
count++;
}
nextOperator.processElement(element);
}
}
有什么方法可以帮助实现这一目标?我有一个主意,但是我不确定它是否按预期工作(不会降低性能)。我将创建与CountInputProcessor
相同的InputProcessor
,但计数部分除外。
class CountInputProcessor {
public void processElement(T element) {
count++;
nextOperator.processElement(element);
}
}
并且当我打开功能时,我重新定义了运算符(InputProcessor
是无状态的。
inputProcessor = new CountInputProcessor();
inputProcessor.processElement(element);
并且当我关闭功能时,我将其重新定义为旧的InputProcessor
。
我不会担心性能下降。只要确保拓扑正确运行,如果拓扑无法按您的意愿扩展,就可以进行通常的调整,例如增加运算符的并行性。