多态的问题,高手进

写一个消息的分发的系统
现在有一个设计问题,想跟你讨论下。

[code="java"]
Dispatcher.class
public handle(BaseEvent event);
[/code]

[code="java"]
IHandler.class (接口)
public handler(LoginEvent event);

public handler(LogoutEvent event);

[/code]

LoginEvent 和 LogoutEvent 是BaseEvent的子类

IHandler有多个实现类

在调用Dispatcher.handle(A);的时候会根据A的类型,获取对应的处理器组进行处理。
然后调用处理器的IHandler.handle(A);
由于IHandler没有BaseEvent类型参数的handler方法所以报错。

想知道这个问题怎样处理,如:根据Class类,如何创建该类型的引用。或者有更好的解决方法。

[code="java"]
public interface IHandler {
void handle(BaseEvent event);
}
public class Dispatcher {
private Map,IHandler> handlerMap;
public Dispatcher() {
handlerMap = new HashMap,IHandler>();
handlerMap.put(LoginEvent.class, new LoginHandler());
handlerMap.put(LogoutEvent.class, new LogoutHandler());
}
public boolean handle(BaseEvent event) {
if (event != null) {
if (handlerMap.containsKey(event.getClass())) {
handlerMap.get(event.getClass()).handle(event);
}
}
}
}
[/code]

我觉得可以这样处理:
[code="java"]
public interface IHandler {

void handle(BaseEvent event);

}

public class Dispatcher {

private IHandler handler;

public Dispatcher(IHandler handler) {

this.handler=handler;
}

public void handle(BaseEvent event) {

if(event!=null){
handler.handle(event);
}

}

}

[/code]