callback的理解与Java实例

本文通过具体的代码实例解释了回调(callback)的概念及其应用场景。以BadBoy打人场景为例,展示了回调机制中对象如何相互传递消息并作出响应。进一步通过数据传递的例子说明了回调在实际开发中的作用。
摘要由CSDN通过智能技术生成
对callback,暂时的理解是:[color=red]A对象调用B接口的b方法,b方法又反过来调用A对象中的c方法。
A调用B接口时把自身给B接口,至于怎么处理,由B的实现类去做,不关A的事。[/color]

写了个例子,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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值