我在所有处理由事件总线类触发的事件的观察者类中都有类似于此的代码。 正如您所看到的,有很多instanceof检查来选择适当处理事件所需的操作路径,并且我想知道是否可以更干净地完成此操作,从而消除了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());
}
}
这是一个干净的,面向对象的方式来做到这一点。其他方式将使用切换瀑布事件的参数..你为什么认为这不明确? – Jack 2010-04-18 15:44:24
@Jack如果您希望稍后添加更多活动,那么这是一个维护噩梦:总会有一个您忘记检查的活动。 – jqno 2010-04-18 15:53:00
如果你有很多事件,那么它将会成为维护噩梦,直到你不给事件祖先类中的常见行为,而不是将它们全部分开。实际上,当number_events> a_considerable_amount时,你将发誓在任何情况下:/ – Jack 2010-04-18 15:56:13