冲杯茶喝 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条)

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格