我在处理事件总线类触发的事件的所有观察者类中都有与此类似的代码.正如您所看到的,有很多instanceof检查选择适当处理事件所需的操作路径,我想知道这是否可以更干净地完成,从而消除了实例测试?
@Override
public void handleEvent(Event event) {
if (event instanceof DownloadStartedEvent) {
DownloadStartedEvent dsEvent = (DownloadStartedEvent)event;
dsEvent.getDownloadCandidateItem().setState(new BusyDownloadingState());
} else if (event instanceof DownloadCompletedEvent) {
DownloadCompletedEvent dcEvent = (DownloadCompletedEvent)event;
dcEvent.getDownloadCandidateItem().setState(new FinishedDownloadingState());
DownloadCandidate downloadCandidate = dcEvent.getDownloadCandidateItem(). getDownloadCandidate();
if (downloadCandidate.isComplete()) {
// start extracting
}
} else if (event instanceof DownloadFailedEvent) {
DownloadFailedEvent dfEvent = (DownloadFailedEvent)event;
dfEvent.getDownloadCandidateItem().setState(new FailedDownloadingState());
}
}
Run Code Online (Sandbox Code Playgroud)
您可以依次为每个事件添加侦听器来消除事件.考虑一下
public void handleStartedEvent(DownloadStartedEvent ev) { ... }
public void handleCompletedEvent(DownloadCompletedEvent ev) { ... }
public void handleFailedEvent(DownloadFailedEvent ev) { ... }
Run Code Online (Sandbox Code Playgroud)
您也可以考虑将Completed/Failed组合到单个事件中,因为看起来您已经有了isCompleted方法.您可以处理CompleteEvent并检查是否成功.如果成功,您可以开始提取,否则您可以设置您的失败状态.
我的另一个想法是你为什么要将一个新对象设置为状态指示器.使用常量/枚举值可能更好吗?
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |