先举个列子。一天小明遇到个问题,打电话问小红这个问题怎么解决,小红知道问题后发现自己要想一会才能解决这个问题,于是对小明说你先做别的事吧,等会我想出来了再给你回电话。这里面的好处是当小明请教小红问题时不必要在那等小红解决问题,而是只要把自己的电话号码给小红,等小红解决问题后会自己打电话去告诉小明,小明在这期间可以做自己别的事。呵呵 其实就一般用在异步的场景,比如典型的ajax就有回调函数。接下来看一下回调的实现方式:
package com.djk.design.huidiao;
/**
* java回调函数
* @author djk
*
*/
public class HuiDiaoTest
{
public static void main(String[] args)
{
XiaoMing xiaoMing =new XiaoMing();
xiaoMing.callXiaoHong();
XiaoHong xiaoHong = new XiaoHong();
xiaoHong.setCassPhoneNumber(xiaoMing);
xiaoHong.answer();
}
}
/**
* 电话号码
* @author djk
*
*/
interface CassPhoneNumber
{
void callBack();
}
class XiaoMing implements CassPhoneNumber
{
public void callBack()
{
System.out.println("问题解决");
}
public void callXiaoHong()
{
System.out.println("喂小红,我现在有个问题解决不了,你绑我解决吧");
}
}
class XiaoHong
{
private CassPhoneNumber cassPhoneNumber;
public void answer()
{
System.out.println("好啊,不过我要想一会,等会我给你回电话");
try {
System.out.println("小红想问题");
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("小红问题想出来了于是打电话给小明");
if(null ==cassPhoneNumber )
{
System.out.println("完了,电话号码忘记了");
}else
{
cassPhoneNumber.callBack();
}
}
public CassPhoneNumber getCassPhoneNumber() {
return cassPhoneNumber;
}
public void setCassPhoneNumber(CassPhoneNumber cassPhoneNumber) {
this.cassPhoneNumber = cassPhoneNumber;
}
}
这就是回调的实现,主要就是被回调者要实现一个规定的接口,然后回调者里面有这个接口的一个引用,当问题解决后就调用这个接口所规范的方法。。。。其实java回调与java的观察者设计模式差不多。。。。都是在第二方和第一方约定一个接口,然后第二方实现这个接口,第一方有这个接口的一个引用去调用其方法。。。。