考虑一个可能需要也可能不需要很长时间才能完成工作的批处理操作(取决于数据)。用户可以注册一个可选的监听器来跟踪作业进度。
注意:监听器注册是完全可选的,用户可能希望在不注册任何监听器的情况下调用作业。
问:以下哪种解决方案是您的首选,为什么?
编辑:这里关心的是性能与干净的代码。有人说,与第二种解决方案相比,检查空引用(解决方案 1)更快。但第二种解决方案更干净,更容易理解。我想听听你的意见。
否 1:允许空侦听器并始终检查侦听器是否不为空,然后调用它。
doMyBatchJob() {
if (listener != null) {
listenr.progressStarted(params);
}
while (x) {
if (listener != null) {
listener.progressUpdated(current, expected)
}
}
if (listener != null) {
listenr.progressFinished(params);
}
}
No 2:实现一个虚拟监听器,如果用户没有通过他/她自己的监听器,则注册它。这样就可以在不检查空对象的情况下调用侦听器。
DummyListener {
public void progressStarted(params) { //DO NOTHING }
public void progressUpdated(current, expected) { //DO NOTHING }
public void progressFinished(params) { //DO NOTHING }
}
doMyBatchJob() {
listener.progressStarted(params);
while (x) {
//Do a single unit of the batch operation
// ... code omitted here
listener.progressUpdated(current, expected)
}
listener.progressFinished(params)
}