java回调机制及其实现
1. 什么是回调函数
回调函数,顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调函数包含下面几个特性:
(1)属于工作流的一个部分;
(2)必须按照工作流指定的调用约定来申明(定义);
(3)他的调用时机由工作流决定,回调函数的实现者不能直接调用回调函数来实现工作流的功能;
2. 回调机制
回调机制是一种常见的设计模式,它把工作流内的某个供,按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据。
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 { }
java回调机制及其实现的更多相关文章
- java回调机制及其实现(转)
1. 什么是回调函数 回调函数,顾名思义,用于回调的函数.回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数.回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机.回调 ...
- Java回调机制总结
调用和回调机制 在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种: 1.同步调用 同步调用是最基本并且最简单的一种调用方式, 类A的方法a()调用类B的方法b( ...
- 转:一个经典例子让你彻彻底底理解java回调机制
一个经典例子让你彻彻底底理解java回调机制 转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273 ...
- JAVA回调机制(CallBack)详解
序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...
- JAVA回调机制解析
一.回调机制概述 回调机制在JAVA代码中一直遇到,但之前不懂其原理,几乎都是绕着走.俗话说做不愿意做的事情叫做突破,故诞生了该文章,算是新年的新气象,新突破! 回调机制是什么?其实回 ...
- 深入浅出: Java回调机制(异步)
一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调 ...
- JAVA 回调机制(callback)
序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...
- 浅谈Java回调机制
像许多网上介绍回调机制的文章一样,我这里也以一个现实的例子开头:假设你公司的总经理出差前需要你帮他办件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差吧,于是就他告诉你他的手机号 ...
- Java基础9:解读Java回调机制
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- (后端)java回调机制
转自强哥: 所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数.例如Win32下的窗口过程函数就是一个典型的回调函数. ...
随机推荐
- ajax中没法用response下载文件啊
ajax 下载不太现实第一,http 不支持直接的二进制传输,二进制数据需要编码 例如base64 ,这点服务器端可以实现第二,客户端获得编码后的文件要转换,js应该也可以第三点,最为致命,js无法操 ...
- [bzoj1187][HNOI2007]神奇游乐园_插头dp
bzoj-1187 HNOI-2007 神奇游乐园 题目大意:经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这 ...
- 洛谷P1352 没有上司的舞会
题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...
- usaco feb04距离咨询
[USACO FEB04]距离咨询 成绩 开启时间 2014年09月19日 星期五 10:08 折扣 0.8 折扣时间 2014年09月26日 星期五 10:08 允许迟交 是 关闭时间 2014 ...
- Windows 10安装IntelliJ IDEA时快捷键冲突设置
Windows的快捷键的非常多,而且个性化软件获得这些权限的也很多,所以没有最终的方法,只能不断的发现和尝试. 下面是收集的一些教程,或许能在这里找到灵感: 切记:不建议优先修改IDEA的快捷键,应该 ...
- Vue.js 和 MVVM
MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...
- Liunx常用命令(备用)
常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir ...
- Android手机输入法按键监听-dispatchKeyEvent
近期在项目开发中遇到一个关于手机输入键盘的坑.特来记录下. 应用场景: 项目中有一个界面是用viewpaper加三个fragment写的,当中viewpaper被我屏蔽了左右滑动,上面有三个点击按钮, ...
- C++对象模型——Default Constructor的建构操作(第二章)
第2章 构造函数语意学 (The Semantics of Constructor) 关于C++,最常听到的一个抱怨就是,编译器背着程序猿做了太多事情.Conversion运算符就是最常被引用的 ...
- centos或者ubuntu设置ssh免密码登陆
1. 输入 # ssh-keygen -t rsa -P "" 然后一路回车 2.输入 # cat ~/.ssh/id_rsa.pub >> ~/.ssh/aut ...