科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件探讨与比较Java和.NET的事件处理框架

探讨与比较Java和.NET的事件处理框架

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

事件驱动模型是软件系统平台中的一个重要区域

作者:佚名 来源:程序员杂志 2007年11月4日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
事件数据

  接下来我们谈一谈另一个在事件模型中的重要角色,就是在事件发布中被传递的“事件数据”。

  一个subscriber在接受同一种事件的时候,可能来自不同的publisher,所以自然地希望知道发出事件的人是谁,也就是在传递的参数当中,必需包含一个publisher 对象的引用。在Java中,推荐所有的事件数据类都继承java.util.EventObject 类。因为在生成一个EventObject 对象的时候,必需给一个event source 对象作为参数。然后可以通过EventObject的getSource()方法来取得这个对象。在EventObject里面,并没有包含其他任何事件数据,所以如果在事件的传递过程当中,有任何事件数据需要传递,就必需从EventObject 派生出一个新的子类出来。如下图:


  在.NET当中也有一个相似的类叫System.EventArgs,但是这个类的内容是空的,如下:

public class EventArgs
{
 public static readonly EventArgs Empty;
 static EventArgs()
 {
  Empty = new EventArgs();
 }
 public EventArgs()
 {}
}

  .NET认为不一定所有的subscriber都对event source感兴趣,所以如果需要的话,就把event source当成是delegate方法的参数来传递好了。.NET定义了一个标准的delegate EventHandler,以下是它的签名(signature):

public delegate void EventHandler(object sender, EventArgs e);

  以后,只要你需要的delegate的签名与EventHandler相同的话,就直接用它了。这里所谓的签名相同,是指参数的类型和返回值的类型皆相同。

  Java和.NET都希望用户在定义的事件数据类的时候,尽可能的使用推荐的基类,因为这样在publisher对发出的事件数据内容有所变更或扩大的时候,对subscriber的冲击会比较小,这是由于多型(polymorphism)机制的帮助。

  结束语

  经过这番解析之后,应该能够比较清楚的了解到Java和.NET事件处理框架的设计思路,希望有助于读者更进一步理解其框架的形成过程。从语言的角度来看,.NET的确有一些针对性的改善和试图简化对事件的处理,Java则仍保有其一贯简约的风格。读者若有任何意见和指教,可以通过e-mail与我交流:bruceyou@sina100.com。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章