本文是仿照 .NET Delegates: A C# Bedtime Story 的功能实现的Java版源代码,时间原因,没有给出文字故事 。请参见原文链接。
独立工作事件
生活事件 (注意此事件有两个子类)
java版的故事很明显要比c#的代码多,这实际上是由于Java中的很多机制是编程实现而不是类库和语言特性支持的缘故,下图是两种实现的比较。
java | c# | 说明 | |
效率 | 采用多态,相对高 | 采用委托,相对低。 | 应该说,它们都是在运行时获取对哪个对象的哪个方法进行调用,但是采用多态相对于委托效率高一点。 |
是否支持静态方法调用 | 否 | 是 | java采用多态,当然不能把方法声明为static;c#中delegate中的_object可以为null来实现对静态方法的调用 |
是否类型安全 | 是 | 是 | 它们都会在编译时对响应函数进行参数检查,类型安全。 |
开发者易用性 | 两级实体对象:事件源-与事件响应者 | 三级实体对象:事件源-委托-事件响应者 | 由于有delegate的封装,不用编写事件注册/注销之类的代码,c#事件处理易用性相对高;注意,虽然java中采用接口来规范响应函数,但这里却说java中是两级实体对象,是因为在运行时并不存在接口的实例(实际上,接口也不可实例化,呵呵) |