回调机制运用什么场景?
1、当你正在做事,但有个信息需要别人通知你,那个人很忙说你留个电话我,有消息我就通知你,你继续干你的事,两不误。可以解决阻塞问题。
2、在某个条件满足后去执行未知的逻辑,因为未知,所以预留接口待外界传入类,有点模板方法的意思。这个可以解耦。
写一个例子:
场景:某员工正在拍卖现场出价,老板说:你按我的指示出价,如果我有变动会通知你,你再改变出价。
分析:员工要不停的出价,不能因为等待老板的电话而停止出价。我们将员工实现callback接口,注入另外个线程,当老板有电话时将信息传入员工,这样不会影响员工工作。
代码:
package my.test.callback;
/**
*
* 描述 回调接口
*
* @author 锅巴
* @version 1.0 2010-10-15
*/
public interface IMessageCallBack {
void receiveMessage(String message);
}
package my.test.callback;
/**
*
* 描述 员工并实现回调接口
*
* @author 锅巴
* @version 1.0 2010-10-15
*/
public class Employee implements IMessageCallBack{
private int value = 8888;
/**
* 不断的出价
*/
public void doWork(){
while(true){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("value:" + value);
}
}
/**
* 回调方法,接收老板指令
*/
public void receiveMessage(String message) {
// TODO Auto-generated method stub
value = Integer.parseInt(message);
}
}
package my.test.callback;
import java.util.Random;
import org.springframework.beans.factory.InitializingBean;
/**
*
* 消息监听器
*
* @author 锅巴
* @version 1.0 2010-10-15
*/
public class Messagelisten implements InitializingBean{
private IMessageCallBack messageCallBack;
public void init(){
(new Thread(new MessageCreate(messageCallBack))).start();
}
public void setMessageCallBack(IMessageCallBack messageCallBack) {
this.messageCallBack = messageCallBack;
}
public void afterPropertiesSet() throws Exception {
// TODO Auto-generated method stub
if(messageCallBack == null){
throw new IllegalAccessException("error: messageCallBack is null");
}
}
}
class MessageCreate implements Runnable{
private IMessageCallBack messageCallBack;
public MessageCreate(IMessageCallBack messageCallBack){
this.messageCallBack = messageCallBack;
}
public void run() {
// TODO Auto-generated method stub
String message = null;
while((message = listen()) != null){
messageCallBack.receiveMessage(message);
}
}
private String listen(){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("---------- listen -----------");
Random random = new Random();
if(random.nextInt(10) > 5){
return String.valueOf(random.nextInt(10000));
}
return null;
}
}
配置文件
<bean id="employee" class="my.test.callback.Employee"/>
<bean id="messagelisten" class="my.test.callback.Messagelisten" init-method="init">
<property name="messageCallBack" ref="employee"/>
</bean>
Test
package my.test.user.api;
import my.test.callback.Employee;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class CallBackTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("callback.context.xml");
Employee employee = (Employee)context.getBean("employee");
employee.doWork();
}
}
分享到:
相关推荐
Java、Android 中常用的回调机制
通过java下的代码实例和android下自定义的按钮功能详细的解释了回调机制以及回调的作用与意义
模块之间总是存在这一定的接口,从调用方式上看,可以分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,也是我们在写程序中经常使用的;...回调是异步的基本,因此下面着重说回调机制。
里面包括一个demo,还有handler回调机制的详细讲解内容。
回调函数与回调机制.docx
本文挡内容主要是 BREW 的回调机制 供大家学习研究之用
详细介绍Android的回调机制,例举了大量的实例,有助于初学者的学习
基于回调机制的事件传播,Android,移动开发
websocket 实现实时推送的例子(工厂模式,回调机制),利用websocket的浏览器与服务器全双工(full-duplex)通信——可以通俗的解释为服务器主动发送信息给客户端的优点实现
Java异步回调机制实例解析共5页.pdf.zip
最最简单的android回调的实现,3分钟了解onclicklistener的实现peng'you原理,送给没了解过回调机制的朋友。
JavaScript的回调机制讲解.pdf
回调用于以下的情形: a) 发出通知,不关心通知的接受者是谁 b) 功能的使用者是一个Framework,不知道(或不关心)具体的功能的提供者是谁。如Windows系统的很多回调函数。 c) 为了防止两个模块的互相依赖,A直接...
前几天看了一下Spring的部分源码,发现回调机制被大量使用,觉得有必要把Java回调机制的理解归纳总结一下,以方便在研究类似于Spring源码这样的代码时能更加得心应手。 注:本文不想扯很多拗口的话来充场面,我的...
先介绍下回调机制原理。 回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该...
本文简要分析了C#的回调机制。分享给大家供大家参考。具体分析如下: 1.回调听起来高大上,实际上本质就是委托,回调是委托的一种应用,其本质就是委托。 2.一般回调多用在线程,因此多声明为类级变量。(和类在同一...
回调机制及其在Android开发中的应用.pdf
回调机制及其在Android应用开发中的应用.pdf