基于Java谈回调函数

  

<强>杂谈

  

还是习惯,写点什么之前,都喜欢来点杂谈。

  

最近都在搞微信的开发,终于在昨晚进入测试阶段了,好快就测出错误来,但也好快修复了。这也让我更担心。

  

虽说是进入内测阶段,但那代码的结构也真太难看了,还得好好重构一下。迟点得写写关于这微信公众号的开发文章。下次再详谈。

  

今天开始了三天半的小长假,但我还是坚守在学校。有点不知道为了什么。

  

刚给wp装了个减价插件,爽歪歪! !

  

在写这篇文章的时候,还是用着wordpress的,但在发表的时候,已经换成hexo了。原因:没有找到一个完美支持减价的插件,越来越觉得wp很臃肿,于是,就拥抱了小萝莉hexo了。哈哈。

  

还有,今天微博看到的一个很赞的神器GitBook,分享一下:

  

构建美丽的编程书和练习使用GitHub/Git和减价。

  http://www.gitbook.io/

  

<强>正题,谈回调函数(回调)

  

解释(引用于百度百科):

  

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所
  指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调
  用的,用于对该事件或条件进行响应。

  

<>强机制(引用于百度百科):

  

⑴定义一个回调函数;

  

⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;

  

⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。

  

<>强意义(个人理解):

  

调用者和被调用者的关系简单化、互相不用关心对方的逻辑处理,不用关系对方都程序是怎么的,只关系返回值,这种基于返回值
  的机制很好地使两者的关系简单,明了。

  

上代码,以下讲述阿Ben去饭堂吃饭的故事

  

<强>接口调

  

接口定义事情做了之后应该做些什么

        公共接口回调{   公共空间(String str);   }      

<强>本类

  

阿Ben饿了,于是要去吃午饭,他叫了阿姨帮他煮个饭,调用阿姨的cookMeal方法,于是阿姨就去煮了,至于怎么煮,本就不用管了,只要煮好了,就调用,给饭阿Ben吃就可以了。

        公共类本实现回调{      公共空间havelunch(阿姨阿姨){   aunt.cookMeal(这个);   }      @Override   公共空间做(String str) {   System.out.println (str);   }      }      

<强>阿姨类

  

赋值给str就是煮饭的过程,煮好之后,就把结果(饭菜)返回给主函数(Ben)。

        公共类{阿姨      字符串str;      公共空间cookMeal(回调){   str="香喷喷的饭菜来咯”;//这个就是煮饭的过程   callback.Done (str);   }      }      

测试类         公共类测试{/* *   * @param arg游戏   */公共静态void main (String [] args) {   阿姨class2=new阿姨();   Ben class1=new ();   class1.havelunch(类别2);   }      }      

结果:   

基于Java谈回调函数

  

刚才阿姨在煮饭的时候,阿Ben是傻乎乎地站在那里等,等同于是在陪阿姨做的饭,这个就是同步回调。

  

时间怎么可以这么浪费的呢。下面来看看异步回调。

  

<强>异步回调

  

这个时候,阿姨还是规规矩矩地做饭。而本啊,得同时做点事情。所以只需要修改本类。

        公共类本实现回调{         公共空间havelunch(最终阿姨阿姨){   新线程(新Runnable(){//新一个新的线程去做这个事情,并等待返回结果      @Override   公共空间run () {   aunt.cookMeal (Ben.this);   }   }) .start ();      玩();//在阿姨做饭的时候可以玩一会手机先嘛。就不用傻傻地等了,阿姨煮好饭会喊吃的了。   }      公共空间玩(){   system . out。println(“玩手机,刷微博,朋友圈,聊扣扣”);   }      @Override   公共空间做(String str) {   System.out.println (str);   }      }

基于Java谈回调函数