注册
 找回密码
 注册
江西广告网
查看: 357|回复: 0
打印 上一主题 下一主题

java中回调的实现

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2009-1-23 11:48:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
//定义一个接口 interface Incrementable...{ void increment(); } //一个简单的接口实现类 class Callee1 implements Incrementable...{ private int i = 0; public void increment()...{ i ; System.out.println (i); } } class MyIncrement...{ void increment()...{ System.out.println ("other operator"); } static void f(MyIncrement mi) ...{ mi.increment(); } } //Callee2 想改变 MyIncrement中 increment()方法的行为。 // 主要是因为Callee2有一个完全不同的incr ()方法 // 要解决的问题是在调用increment 方法的时候 改而调用 incr方法 //父类有一个increment 不能因为字类的用途而覆盖这个方法 //所以字类重新写了一个 incr 方法。 class Callee2 extends MyIncrement...{ private int i = 0; //一个用来替代incrment方法的行为的方法。 private void incr()...{ i ; System.out.println (i); } //内部类实现Incrementable接口 private class Closure implements Incrementable ...{ public void increment()...{ incr(); } } //获得一个回调的引用 Incrementable getCallBackReference()...{ return new Closure(); } } class Caller...{ private Incrementable callbackReferences; //它只需要一个接口。 Caller (Incrementable chb)...{ callbackReferences = chb; } void go()...{ callbackReferences.increment(); } } class Callbacks...{ public static void main(String[] args)...{ Callee1 c1 = new Callee1(); Callee2 c2 = new Callee2(); MyIncrement.f(c2); Caller caller1 = new Caller(c1); //客户端完全不知道 caller2 中的incrment方法的实现。 //事实上Callee2完全改变了incrment方法的行为(调用了另一个方法) Caller caller2 = new Caller(c2.getCallBackReference()); caller1.go(); caller1.go(); caller2.go(); caller2.go(); } } //回调的价值在于它的灵活性--在运行时决定调用哪个方法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表