1. 什么是回调函数

回调函数,顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调函数包含下面几个特性:

(1)属于工作流的一个部分;
  (2)必须按照工作流指定的调用约定来申明(定义);
    (3)他的调用时机由工作流决定,回调函数的实现者不能直接调用回调函数来实现工作流的功能;

2.  回调机制

回调机制是一种常见的设计模式,它把工作流内的某个数据处理逻辑,按照约定的接口暴露给外部使用者。为外部使用者提供数据,或要求外部使用者提供数据。
就像电脑上的USB接口,插什么U盘都可以,可以从电脑上Copy数据,也可以Copy数据到电脑。

3.java的回调机制

软件模块之间总是存在这一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调、异步调用。

同步调用:一种阻塞式调用,调用方要等待对方执行完毕才能返回,它是一种单向调用;

回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口

异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。

回调和异步调用的关系非常紧密:使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。

4.回调的java例子

例1:

public class CallbackExample {
public static void main(String[] args) {
FooBar fooBar = new FooBar();
fooBar.setCallback(new ICallback() {
public void postExec() {
System.out.println("在CallbackExample类中实现但不能被CallbackExample的对象调用,而由FooBar对象调用");
}
});
}
} interface ICallback {
//需要回调的方法
public void postExec();
} class FooBar {
private ICallback callback;
public void setCallback(ICallback callback) {
this.callback = callback;
doSth();
} public void doSth() {
callback.postExec();
}
}

例2:

public class CallbackFetcherExample {
public static void main(String[] args) {
new Worker().doWork();
}
} interface FetchCallback {
void onData(Data data);
void onError(Throwable cause);
} interface Fetcher {
void fetchData(FetchCallback callback);
} class Worker {
Data data = new Data();
public void doWork() {
Fetcher fetcher = new Fetcher() {
public void fetchData(FetchCallback callback) {
System.out.println("start fetch data...");
callback.onData(data);
}
};
fetcher.fetchData(new FetchCallback() {
public void onData(Data data) { // call if data is fetched without error
System.out.println("Data received: " + data);
} public void onError(Throwable cause) { //call if error is received during fetch
System.err.println("An error accour: " + cause.getMessage());
}
});
}
} class Data { }

http://blog.csdn.net/xyls12345/article/details/26452247

观察者模式与回调机制的关系

观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。

以上篇博文java回调机制及其实现为例,在例1中可以将FooBar作为一个主题(被观察者),ICallback的实现对象作为观察者,当FooBar调用setCallback时,通知ICallback的postExec()方法改变状态,当然这是一对一的依赖。

所以,我们可以把回调机制是观察者模式的一个特殊类型,即只有一个观察者。
http://blog.csdn.net/xyls12345/article/details/26456323

java回调机制及其实现(转)的更多相关文章

  1. Java回调机制总结

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

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

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

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

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

  4. JAVA回调机制解析

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

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

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

  6. JAVA 回调机制(callback)

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

  7. 浅谈Java回调机制

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

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

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

  9. (后端)java回调机制

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

随机推荐

  1. Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 具体解释

    看资料的时候常常看到各种VGA,全都混了,无奈,找了些资料总结了下,分享给大家: 这些术语都是指屏幕的分辨率. VGA:Video Graphics Array,即:显示画图矩阵,相当于640×480 ...

  2. hdoj 2102 A计画 【BFS】

    称号:hdoj 2102 A计画点击打开链接 意甲冠军:文的就不说了.求救出公主所须要的最短时间,所以用广搜. 分析:读题之后不难做,比一般的题目多了一个条件就是能够传送,那么我们能够在广搜里面加一个 ...

  3. debain install scim

    1. su input root pwd 2. apt-cache search scim apt-get install scim apt-cache search scim-pinyin apt- ...

  4. svn加入新的文件夹

    方法一: 1.在远程server上生成新的文件夹 svn mkdir http://svn.xxx.com/svn/mobile/strategy/assistant/branches/talk -m ...

  5. Cocos发展Visual Studio下一个libcurl图书馆开发环境的搭建

    我们解释win32在Visual Studio下一个libcurl图书馆开发环境的搭建.Cocos2d-x发动机实际上与Win32在访问libcurl库.Cocos2d-x 3.x在libcurl库文 ...

  6. 解决adb server is out of date. killing...问题

    在运行 adb 命令时出现了例如以下提示: adb server is out of date.  killing... 导致 adb 无法正常启动,更无法运行其它命令. 有问题怎么办?百度呗.查了查 ...

  7. android AlarmManager采用

    Android的闹钟实现机制非常easy, 仅仅须要调用AlarmManager.Set()方法将闹钟设置提交给系统,当闹钟时间到后,系统会依照我们的设定发送指定的广播消息.我们写一个广播去接收消息做 ...

  8. WCF基金会

    概念: Windows CommunicationFoundation(WCF)是由微软发展的一组数据通信的应用程序开发接口.能够翻译为Windows通讯接口.它是.NET框架的一部分. 简单地说,W ...

  9. Windows下效率必备软件

    AutoHotKey: 神器!神器!神器!当然也得看使用者咯(^__^) 嘻嘻…… Listary: 本地搜索神器,当然还有别的作用,More&More. Launchy : 快速启动安装的应 ...

  10. iOS 7 新特性

      iOS7更新了很多引人注目的功能.用户界面完全重新设计了.iOS7为开发2D,2.5D游戏引入了全新的动画系统.加强多线程,点对点连接,以及许多其他重要的功能让iOS7成为有史以来最有意义的一次发 ...