参考例子:android的Button OnClickListener接口、《第一行代码》中的回调例子
 
定义接口
  1. public interface HttpCallbackListener{
  2.     void onFinish(Stringresponse);
  3.     void onError(Exceptione);
  4. }
 
调用接口
  1. publicclassHttpUtil{
  2.     publicstaticvoid sendHttpRequest( finalStringaddress,final HttpCallbackListener listener){
  3.         newThread(newRunnable(){
  4.             @Override
  5.             publicvoid run(){
  6.                 HttpURLConnection connection = null;
  7.                 try{
  8.                     URLurl= newURL(address);
  9.                     connection =(HttpURLConnection)url.openConnection();
  10.                     connection.setRequestMethod("GET");
  11.                     connection.setConnectTimeout(8000);
  12. connection.setReadTimeout(8000);
  13.                     connection.setDoInput(true);
  14.                     connection.setDoOutput(true);
  15.                     InputStreamin= connection.getInputStream();
  16.                     BufferedReaderreader= newBufferedReader(new InputStreamReader(in));
  17.                     StringBuilderresponse= newStringBuilder();
  18.                     String line;
  19.                     while((line = reader.readLine())!= null){
  20.                         response.append(line);
  21.                     }
  22.                     if(listener != null){
  23.                         //回调onFinish()方法
  24.                         listener.onFinish(response.toString());
  25.                     }
  26.                     }catch(Exceptione){
  27.                         if(listener != null){
  28.                             //回调onError()方法
  29.                             listener.onError(e);
  30.                         }
  31.                     }finally{
  32.                         if(connection != null){
  33.                             connection.disconnect();
  34.                         }
  35.             }
  36.         }
  37.     }).start();
  38. }
  39. }
 
实现接口,参数传入
  1. HttpUtil.sendHttpRequest(address,newHttpCallbackListener(){
  2.     @Override
  3.     publicvoidonFinish(Stringresponse){
  4.     //在这里根据返回内容执行具体的逻辑
  5.     }
  6.     @Override
  7.     publicvoidonError(Exceptione){
  8.     //在这里对异常情况进行处理
  9.     }
  10. });
 
 

 
回调机制适用情景:
回调通常是在两个不同的线程间需要同步的情况下才出现的(见极客学院项目教程《智能聊天机器人》)
多在框架开发中使用,回调的接口由具体的应用者自行设计与实现。
 

在三层中,当业务层调用数据层时,是不需要把业务层自身传递到数据层的,并且这是一种上层调用下层的关系,比如我们在用框架的时候,一般直接调用框架提供
的API就可以了,但回调不同,当框架不能满足需求,我们想让框架来调用自己的类方法,怎么做呢?总不至于去修改框架吧。许多优秀的框架提几乎都供了相关
的接口,我们只需要实现相关接口,即可完成了注册,然后在合适的时候让框架来调用我们自己的类,还记不记得我们在使用Struts时,当我们编写
Action时,就需要继承Action类,然后实现execute()方法,在execute()方法中写咱们自己的业务逻辑代码,完成对用户请求的处
理。由此可以猜测,框架和容器中会提供大量的回调接口,以满足个性化的定制。

即:为了使我们写的函数接近完美,就把一部分功能外包给别人,让别人个性化定制,至于别人怎么实现不管,我唯一要做的就是定义好相关接口,这一设计允许了底层代码调用高层定义的子程序,增强程序灵活性,和反射有着异曲同工之妙。

JAVA - 回调机制的更多相关文章

  1. java回调机制及其实现(转)

    1. 什么是回调函数 回调函数,顾名思义,用于回调的函数.回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数.回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机.回调 ...

  2. Java回调机制总结

    调用和回调机制 在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种: 1.同步调用 同步调用是最基本并且最简单的一种调用方式, 类A的方法a()调用类B的方法b( ...

  3. 转:一个经典例子让你彻彻底底理解java回调机制

    一个经典例子让你彻彻底底理解java回调机制 转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273 ...

  4. JAVA回调机制(CallBack)详解

    序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...

  5. JAVA回调机制解析

    一.回调机制概述     回调机制在JAVA代码中一直遇到,但之前不懂其原理,几乎都是绕着走.俗话说做不愿意做的事情叫做突破,故诞生了该文章,算是新年的新气象,新突破!     回调机制是什么?其实回 ...

  6. 深入浅出: Java回调机制(异步)

    一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调 ...

  7. JAVA 回调机制(callback)

    序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...

  8. 浅谈Java回调机制

    像许多网上介绍回调机制的文章一样,我这里也以一个现实的例子开头:假设你公司的总经理出差前需要你帮他办件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差吧,于是就他告诉你他的手机号 ...

  9. Java基础9:解读Java回调机制

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  10. (后端)java回调机制

    转自强哥: 所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数.例如Win32下的窗口过程函数就是一个典型的回调函数. ...

随机推荐

  1. 纯蓝ICON_学习教程

  2. C#三种方式实现序列化(转)

    序列化和反序列化我们可能经常会听到,其实通俗一点的解释,序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用. 序列化和反序列化最主要的作用有: ...

  3. java获得url里面所带参数的值

    url: http://localhost:8080/test/list?p=1&d=2014 要获得所带参数p和d的值,方法如下: int p = Integer.parseInt(requ ...

  4. 插入数据前设置字符编码为utf8

    xxx.php保存时选择utf8编码,页头最好加上 header('conten-type:text/html;charset=utf-8'); 在执行CRUD操作前先执行一下 mysql_query ...

  5. python之map和filter

    li = [11,22,33,44,55,66] ret = filter(lambda a:a>33,li) print(list(ret)) ret2 = map(lambda a:a+10 ...

  6. Light OJ 1104 第六周F题

    F - 概率(经典问题) Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu   Descri ...

  7. python getpass模块:隐藏不显示输入的密码

    不知道为什么,本机测试必须要在debug模式下才正常运行.. import getpass #用于隐藏用户输入的字符串,常用来接收密码 def checkuser(user,passwd): ': r ...

  8. Android Service 启动和停止服务

    activity_main.xml 定义两个Button控件,start_service和stop_service. <LinearLayout xmlns:android="http ...

  9. Ubuntu 启用root账户

    设置分配很简单,只要为root设置一个root密码就行了: $ sudo passwd root 之后会提示要输入root用户的密码,连续输入root密码,再使用:$ su 就可以切换成超级管理员用户 ...

  10. ATR的基本结构与意义(无历史字符部分)

    Reset 3B FA 13 00 00 81 31 FE 45 4A 43 4F 50 34 31 56 32 32 31 96 复位应答 ATR TS( The Initial character ...