冲杯茶喝 2012-05-18 17:28
浏览 189
已采纳

多态的问题,高手进

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

[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类,如何创建该类型的引用。或者有更好的解决方法。

  • 写回答

2条回答 默认 最新

  • iteye_7589 2012-05-18 21:28
    关注

    [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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 unity3d机械臂
  • ¥20 判断两个表是否完全相同
  • ¥20 工控机出现散热器转一下停一下这种情况,是什么原因造成的
  • ¥15 双显卡,启动docker容器报错。
  • ¥15 想编写一个期货跨期套利的程序
  • ¥15 一个线程在sleep的时候set一个信号会起作用吗
  • ¥50 如何利用matlab将现有的地基雷达回波数据调制为机载雷达回波数据
  • ¥100 需求高精度PT100设计电路和算法
  • ¥15 单片机配网,继电器开关,广播
  • ¥60 Qcustomplot绘制实时动态曲线