参考例子: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. 使用Jquery解析Json

    利用原生JSON对象,将对象转为字符串 [javascript] view plaincopy var jsObj = {};   jsObj.testArray = [1,2,3,4,5];   j ...

  2. JavaScript-学习一加载不动

    为先加载的js后加载的html 加载完js运行时因为未加载html的原因导致找不到js所控制的元素 所以解决的方法就是把js放到控制元素的下方 或者html的底部 做成函数的时候可以放在头部,也就是说 ...

  3. Oracle 体系结构及安全管理

    1 oracle数据库服务器构成:数据库和实例2 oracle内部结构: 物理存储结构: 数据文件(xxx.dbf):存放数据 控制文件(xxx.ctl):控制数据库的完整性恢复数据或使用的日志文件 ...

  4. 利用Warensoft Stock Service编写高频交易软件

    利用Warensoft Stock Service编写高频交易软件 无论是哪种交易软件,对于程序员来讲,最麻烦的就是去实现各种算法.本文以SAR算法的实现过程为例,为大家说明如何使用Warensoft ...

  5. Python自动化运维之16、线程、进程、协程、queue队列

    一.线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行 ...

  6. poj2255 (二叉树遍历)

    poj2255 二叉树遍历 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu   Descripti ...

  7. Spark笔记--使用Maven编译Spark源码(windows)

    1. 官网下载源码 source code,地址: http://spark.apache.org/downloads.html 2. 使用maven编译: 注意在编译之前,需要设置java堆大小以及 ...

  8. svn , github工作流

    svn 需要有一台中央服务器,所有的分支,主干,标签,全都保存在这台中央服务器上.开发着需要提交代码时,需要保持中央服务器连接.切换分支时会有本地与服务器网络连接. git 改进了这一点,每台安装有g ...

  9. Eclipse里的智能提示

    Eclipse 3.1里的智能提示功能对于写JAVA程序又不记得类名和函数的人来说是一个很好的助手工具,但是Eclipse里的智能提示的快捷键是Ctrl+Space,在中文Windows操作系统中它确 ...

  10. QWidget中嵌入win32 window(使用QWindow和QWidget::createWindowContainer)

    主要用到QWindow::fromWinId和QWidget::createWindowContainer这两个函数 QWindow::fromWinId用来创建一个win32窗口的代理 QWidge ...