Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3298460
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类: Java

2011-04-04 13:10:39

1.概述
      回调,就是客户程序C调用服务程序S中的某个方法a,然后S又在某个时候反过来调用C中的某个方法b,对于C来说,这个b便叫做回调函数。
      C不会自己调用b,C提供b的目的就是让S来调用它,而且是C不得不提供。由于S并不知道C提供的b叫甚名谁,所以S会约定b的接口规范(函数原型),然后由C提前通过S的一个函数r告诉S自己将要使用b函数,这个过程称为回调函数的注册,r称为注册函数。

     从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。

2.异步+回调编程模式
应用场景
      A打电话向B请教问题,B一时解决不了,A又不能拿着电话在那里傻等,于是约定:等B想出办法后打手机通知我,这样,A就挂掉电话办其它事情去了。过了XX分钟,A的手机响了,B兴高采烈的说问题已经搞定,结果给你。其中,A的手机号码R必须在以前告诉你,R便是注册回调函数;A的手机号码应该有效并且手机能够接收到B的呼叫,这是回调函数必须符合接口规范。

例:代码演示
1.公布A的手机号
  1. /**
  2.  * A的手机号,回调函数接口.
  3.  * @version V1.0 ,2011-4-4
  4.  * @author xiahui
  5.  */
  6. public interface ICallbackCode {
  7.     public void doTelephone(String result);
  8. }
2.A实现了接听手机的处理过程,并且A可以向B发消息
  1. /**
  2.  * A有一个电话号码ICallbackCode,别人可以打电话,A来处理.
  3.  * @version V1.0 ,2011-4-4
  4.  * @author xiahui
  5.  */
  6. public class A implements ICallbackCode{
  7.     
  8.     //别人打来电话,则处理
  9.     public void doTelephone(String result) {
  10.         System.out.println(result);
  11.         
  12.     }
  13.     
  14.     //向B发送一个请求
  15.     public void callB(){
  16.          B b=new B();
  17.          b.doSth(this);//调用B,并要求B将结果返回给我
  18.     }
  19.     
  20.      public static void main(String[] args){
  21.          A a = new A();
  22.          a.callB();//向B发送一个请求
  23.      }
  24. }
3.B向外声明可以做doSth,处理完后将结果返回给调用者
  1. /**
  2.  * B向外声明可以做doSth,处理完后将结果返回给调用者.
  3.  * @version V1.0 ,2011-4-4
  4.  * @author xiahui
  5.  */
  6. public class B {

  7.     //调用者的电话号码
  8.     private ICallbackCode callback;
  9.     
  10.     public void doSth(ICallbackCode iCallback) {
  11.         callback = iCallback;
  12.         
  13.         //处理,并得到结果result
  14.         String result="这是结果";
  15.         
  16.         //拨打调用者的电话
  17.         callback.doTelephone(result);
  18.     }
  19. }
本人对网上的例子进行了修改,网上的例子明显理论和实现对不上,基本都是一支半解的,无语。


参考文献
1.java回调函数. http://ayzw001.blog.163.com/blog/static/1134114222009420112538726/
2.JAVA中的回调函数介绍.
阅读(1070) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~