冲杯茶喝 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 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作