`

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机制,是面向对象编程中一种重要的设计模式,它允许一个对象在其他对象执行特定操作后得到通知或者进行后续处理。在Java中,回调通常通过接口来实现,因为Java不支持函数指针。让我们...

    Android APP 用interface 接口的形式对jni进行回调,实例测试

    首先,我们需要理解Java接口在JNI中的作用。在Android中,Java接口可以作为参数传递给JNI方法,这样就可以在C/C++代码中调用Java对象的方法。这种方式使得JNI层能够主动通知Java层某些事件的发生,增强了两者之间的...

    java跨域实例+日志文件

    Java跨域实例与日志文件是前端开发与后端服务交互过程中常见的技术点。在Web应用中,由于浏览器的同源策略限制,JavaScript通常不能直接访问不同源的资源,这就是所谓的“跨域”问题。本实例将探讨如何通过JSONP...

    java中Callback简单使用总结

    1. **Callback的定义与应用场景** Callback,即回调,可以理解为一个对象(通常是一个接口)的引用,被传递给另一个对象,以便在特定条件满足时,被调用的对象能够执行相应的操作。在Java中,这通常通过接口实现。...

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

    在本例中,使用了嵌套的SELECT子查询来获取描述性信息,例如部门描述、路线描述、车站描述等,将代码转化为易于理解的文本,使得报表内容更加清晰。 3. **参数化查询**:SQL查询中的`:P_1`和`:P_2`是参数占位符,...

    Rmi callback

    总的来说,"Rmi callback"实例展示了如何在Java的RMI环境中实现双向通信,增强了服务器与客户端之间的交互能力。理解这个实例有助于开发者深入理解RMI的工作原理和回调机制,对于开发分布式系统具有重要的实践意义。

    基于Java的实例源码-调用本地库 JNAerator.zip

    学习这些示例,开发者不仅可以掌握如何利用JNAerator简化本地库的调用,还能理解如何在实际项目中有效地集成和管理本地库,提高Java项目的功能和性能。通过深入研究这些源码,开发者可以进一步提升其Java和跨平台...

    CallBack_DEMO 回调

    在本示例"CallBack_DEMO"中,我们可能正在探讨如何在Java或其他编程语言中实现回调机制。回调通常与异步编程相关,尤其是在处理I/O操作、网络请求或者时间事件时,它能让程序在执行完成后继续执行后续操作,而不是...

    微信企业号回调模式实例(Java版)

    本实例将聚焦于Java版本的实现,通过深入理解回调模式,我们可以更好地构建稳定、高效的微信企业号应用。 首先,我们要明白微信企业号回调的基本原理。当微信企业号接收到特定事件(如用户关注、取消关注、消息发送...

    jqGrid整合Java SSH框架实例

    jqGrid是一款功能强大的JavaScript数据网格插件,常用于构建数据密集型Web应用,提供数据的检索、排序、分页、编辑等操作。...同时,理解并熟练掌握这些技术,有助于提升Java Web开发的效率和质量。

    java 最简答的回调理解

    回调在编程中是一种设计模式,尤其在异步编程和事件驱动的系统中广泛使用。Java回调的理解对于初学者来说可能有些抽象,但一旦掌握,它能...希望这个简明的介绍能帮助你更好地理解Java回调的概念,并在实践中灵活运用。

    基于Java的实例源码-异步HTTP客户端开发包 HttpAsyncClient.zip

    - **Callback机制**:在请求完成后,HttpAsyncClient会调用预先定义的回调接口,例如` HttpContextAwareCallback`,以便处理响应。 - **连接管理**:包括连接池,用于复用已建立的TCP连接,减少网络延迟。 - **...

    java自定义回调函数

    // this 指向实现了Callback接口的实例 ``` 在Android开发中,回调函数非常常见,如Activity与Fragment间的通信、网络请求的异步处理等。SDK开发中,回调也是必不可少的一部分,因为它允许开发者自定义处理数据和...

    java接口回调

    接下来,`Test.java`可能是一个测试类,用来创建`MyThread`实例并设置回调。在这个例子中,`Test`类实现了`CallBack`接口,当`MyThread`执行完毕后,会调用`Test`的`onTaskFinished`方法: ```java public class ...

    hello-jniCallback.zip

    标题中的"hello-jniCallback.zip"表明这是一个与JNI(Java Native Interface)相关的项目,其中可能包含了一个示例或教程,用于演示如何在Android应用中使用JNI进行回调操作。JNI是Java平台提供的一种标准机制,允许...

    Android JNI多线程编程回调JAVA函数

    - JNI是Java平台的一部分,为Java应用程序提供了与本地代码交互的能力。开发者可以通过JNI在Java中调用C/C++代码,反之亦然。 - JNI接口包括一系列的函数,如`FindClass`, `GetMethodID`, `NewGlobalRef`等,用于...

    java 回调函数的理解

    这个机制使得代码能够实现异步处理、事件驱动和松耦合,是理解和使用Java库或框架时不可或缺的知识点。回调函数的核心在于,一个对象(调用者)通过传递一个方法引用给另一个对象(被调用者),被调用者在完成某些...

    interfaceCallback

    总之,"InterfaceCallBack"程序通过实例展示了接口回调的使用,帮助开发者理解并掌握这一重要的设计模式。学习并熟练运用接口回调,能有效提高代码的可读性、可维护性和扩展性,对于提升编程技能具有重要意义。在...

    JNA 转java接口以及指针结构体解析

    JNA通过提供一个映射机制,将Java方法与C/C++函数相对应,从而简化了跨平台的系统调用。在"JNA 转java接口以及指针结构体解析"这个主题中,我们将深入探讨如何使用JNA来处理C语言中的结构体和指针。 首先,理解JNA...

Global site tag (gtag.js) - Google Analytics