`

callback的理解与Java实例

阅读更多
对callback,暂时的理解是:A对象调用B接口的b方法,b方法又反过来调用A对象中的c方法。
A调用B接口时把自身给B接口,至于怎么处理,由B的实现类去做,不关A的事。


写了个例子,BadBoy,这类坏孩子喜欢打人,有个方法叫hit,hit只能对实现了Hitable的对象执行。这时候,BadBoy已经做完了自己的事,也就是已经打完人了,然后挨打的人肯定知道是谁打了自己,至于挨打的人是什么反应,BadBoy是无法控制的。挨打的人有可能哭有可能跑有可能报警。

BadBoy:
class BadBoy {
	String name;

	public BadBoy(String name) {
		this.setName(name);
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
        //打人
	public void hit(Hitable hitable) {
		System.out.println("----------------BEGIN----------------");
		System.out.println("badboy " + this.getName() + "打了"
				+ hitable.getName() + "一拳");
		hitable.beHit(this);
		System.out.println("-----------------END----------------");
	}

}


挨打的人的接口,他们有一个共同的方法,就是beHit(BadBoy boy),既然挨打了,肯定知道是谁打的自己,所以打人者BadBoy被作为参数传进来。
interface Hitable {
	public void beHit(BadBoy boy);

	public String getName();

	public void setName(String name);
}


Child:这个类实现了Hitable,小孩挨打了,反应是哭。。
class Child implements Hitable {
	String name;

	public Child(String name) {
		this.setName(name);
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public void beHit(BadBoy boy) {
		System.out.println("child " + this.getName() + "被" + boy.getName()
				+ "打哭了");
	}

}


BigMan也实现了Hitable接口,这类人比较猛,挨打后的反应,是把打人者杀了。。
class BigMan implements Hitable {
	String name;

	public BigMan(String name) {
		this.setName(name);
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public void beHit(BadBoy boy) {
		System.out.println("bigman " + this.getName() + "把" + boy.getName()
				+ "杀死了");
	}

}




test类:
public class CallBackTest {
	public static void main(String[] args) {
		BadBoy badboy = new BadBoy("Tom");
		Hitable child = new Child("Cat");
		Hitable bigman = new BigMan("Boris");
		badboy.hit(child);
		badboy.hit(bigman);
	}
}


执行结果:
----------------BEGIN----------------
badboy Tom打了Cat一拳
child Cat被Tom打哭了
-----------------END----------------
----------------BEGIN----------------
badboy Tom打了Boris一拳
bigman Boris把Tom杀死了
-----------------END----------------



这个例子可以看出,坏孩子在打了挨打者以后,把自己作为参数给了挨打者,等于是告诉挨打者,“我打了你,你爱怎么着怎么着吧”,接下来挨打者调用方法beHit,不同类型的挨打者会对坏孩子做出不同的反应。
这个例子类似一个通知,在做取值传值的时候会很有用。

例子2:

根据上边例子再联想一个例子,A取数据要给B,A是一个不断在polling数据的对象,B是一个接口,A取到数据后调用B接口的b方法,并且把自己的引用传给B,告诉B,我已经取到了你要的数据,你自己来拿吧,到这里,A已经完成了任务。B的实现类会根据自己的不同实现,在从A取来数据后进行处理,可能是排序,可能是输出到文件,也可能是打印。

例子2,证明了callback的另一个说法的概念:if you call me,I will call you back。

19
0
分享到:
评论
10 楼 pkray 2014-08-22  
使用匿名内部类可以很方便地定义回调
9 楼 mvpstevenlin 2013-08-26  
本来不懂的,经博主这么深刻的写作,就懂了! 谢博主
8 楼 dubutianya 2011-04-07  
对楼主佩服的五体投地……
7 楼 lord74 2010-11-19  
精辟     
6 楼 taro3372 2010-11-19  
cool!!
5 楼 liuyupy 2010-11-18  
监听器(SWING编程中一大堆回调).
4 楼 Ashfrog 2010-11-12  
例子很直观,很详细···
不错···
支持了···
3 楼 KimHo 2010-11-12  
很形象的演讲。
估计楼主看国外的经典书籍比较多,比如head first系列那些
2 楼 beiyu95 2010-11-10  
cool!!!
1 楼 langyu 2010-11-09  
使用范型时经常会用到,Callback从范型的公用处提取每种处理的不同。

相关推荐

    Java 回调机制(CallBack) 详解及实例代码

    主要介绍了 Java 回调机制(CallBack) 详解及实例代码的相关资料,需要的朋友可以参考下

    设计模式Callback介绍与实例

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

    java CallBack(回调函数)

    简介: 简要说明接口回调:即使实现接口类的引用赋值给该接口申明的变量,然后该变量就可以调用接口中的方法了(当接口变量调用接口中的方法的时候,实际上我们处理的是该接口实现类中的相应的函数的实现部分)。

    GUI实例如何在响应之间传递数据-co_callback.m

    GUI实例如何在响应之间传递数据-co_callback.m 实例说明:利用句柄结构在响应之间传递数据;用户移动滚动条时文本框显示滚动条的当前值(介于最大值1最小值0之间),用户在文本框中输入一个值则滚动条自动移动到与...

    JS回调函数 callback的理解与使用案例分析

    本文实例讲述了JS回调函数 callback的理解与使用。分享给大家供大家参考,具体如下: 基本理解一个概念 回调函数回头再调用函数,等主干事情干完了,再回头干分支上的事情。 官方定义 A callback is a function ...

    (Actuate e.Spreadsheet callback Interface)用程序制作报表的实例.doc

    (Actuate e.Spreadsheet callback Interface)用程序制作报表的实例.doc

    C++中回调函数(CallBack)的用法分析

    本文实例分析了C++中回调函数(CallBack)的用法。分享给大家供大家参考。具体分析如下: 如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。 其错误是普通的C++成员函数都隐含了一个传递...

    java callback

    java callbackjava callbackjava callbackjava callbackjava callbackjava callbackjava callbackjava callbackjava callbackjava callbackjava callbackjava callbackjava callbackjava callbackjava callbackjava ...

    Java_JNI_Callback.rar_4 3 2 1_J2SDK1.4.0_Java_JNI_Callback_cl.dl

    compile Callback.java 2. compile the native code into a shared lib cl /Ie:\j2sdk1.4.0\include /Ie:\j2sdk1.4.0\include\win32 /LD /FeMyImpOfCallback.dll Callback.c 3. run: java Callback

    Ajax三级无刷新级联实例使用CallBackObject.js 简易Ajax框架

    Ajax三级无刷新级联实例使用CallBackObject.js 简易Ajax框架,使用js实现,数据库为Sql2005的,自己学的一个小例子简单易懂。

    Android 通过自定义Dialog来理解接口回调callback

    通过简单的自定义Dialog来理解接口回调callback机制

    C#使用C++标准DLL实例(包含callback)

    NULL 博文链接:https://jacky-dai.iteye.com/blog/2323820

    详解 JAVA的回调机制CallBack

    最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义,本文给大家介绍JAVA的回调机制CallBack,感兴趣的...

    JAVA_API1.6文档(中文)

    java.awt.geom 提供用于在与二维几何形状相关的对象上定义和执行操作的 Java 2D 类。 java.awt.im 提供输入方法框架所需的类和接口。 java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的...

    Rmi callback

    rmi callback 实例,非常好请大家多提意见。

    C# WCF CallBack Demo

    简单易懂,快速了解WCF如何CallBack

    GUI实例如何在响应之间传递数据-co_callback.fig

    GUI实例如何在响应之间传递数据-co_callback.fig 实例说明:利用句柄结构在响应之间传递数据;用户移动滚动条时文本框显示滚动条的当前值(介于最大值1最小值0之间),用户在文本框中输入一个值则滚动条自动移动到...

    callback例子

    这是一个及其简单的但是又实用的callBack

    Android java 回调例子

    相信很多初学android java的童鞋们都不太懂回调的意思,我当时也是这样的什么这个跳到那个然后又从那个调用这个的方法。。。弄得晕头转向的,今天我突然顿悟,于是写了一个回调例子与大家分享,由于手头分不多了,...

    Callback_Androidjni_AndoidJNI层到Java层的调用_android_android回调_

    例子中包含Android 应用程序和JNI的程序,实现充JNI到java层的回调

Global site tag (gtag.js) - Google Analytics