首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

callback的懂得与Java实例

2012-09-01 
callback的理解与Java实例对callback,暂时的理解是:A对象调用B接口的b方法,b方法又反过来调用A对象中的c方

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;}@Overridepublic 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;}@Overridepublic 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。

1 楼 langyu 2010-11-09   使用范型时经常会用到,Callback从范型的公用处提取每种处理的不同。 2 楼 beiyu95 2010-11-10   cool!!! 3 楼 KimHo 2010-11-12   很形象的演讲。
估计楼主看国外的经典书籍比较多,比如head first系列那些 4 楼 82934162 2010-11-12   KimHo 写道很形象的演讲。
估计楼主看国外的经典书籍比较多,比如head first系列那些
兄弟你真的高看我了。。。我虽然在做欧美的项目,但是英语真的很烂。。。英文书也很少看。。。。 5 楼 Ashfrog 2010-11-12   例子很直观,很详细···
不错···
支持了··· 6 楼 liuyupy 2010-11-18   监听器(SWING编程中一大堆回调). 7 楼 taro3372 2010-11-19   cool!! 8 楼 lord74 2010-11-19   精辟     
9 楼 dubutianya 2011-04-07   对楼主佩服的五体投地……

热点排行