JAVA:这个就是回调函数吗?我没看出来A调用B,B又回来调用A这种关系啊

public interface EventInfo { 接口
void showEventInfo();
}

public class SearchInfo implements EventInfo { 实现类
public SearchInfo() {
}

public void showEventInfo() {

    System.out.println("发生了查询事件");
}

}

public class PrintInfo implements EventInfo { 实现类
public PrintInfo() {
}

public void showEventInfo() {
    System.out.println("发生了打印事件");
}

}

public class EventNotifier {
private EventInfo ei;

public EventNotifier() {
}

public void setEventInfo(EventInfo ei) {
    this.ei = ei;
}

public void doWork() {

    ei.showEventInfo();

}

}

public class Test {

public static void main(String[] args) {
    PrintInfo pi = new PrintInfo();
    SearchInfo si = new SearchInfo();
    EventNotifier en = new EventNotifier();

    en.setEventInfo(pi);
    en.doWork();
    en.setEventInfo(si);
    en.doWork();
}

}

最后输出:
发生了打印事件
发生了查询事件

这是我在网上看到的例子 但是没看出怎么就回调了呢 ?

Java中所谓的回调 其实就是命令设计模式。 即命令设计模式 是 回调的 对象表示形式。

如在javascript中

function a() {
return function() {//返回一个匿名函数
alert(1);
}
}

do(task) {
task();//这就是回调

}

do(a());

回调主要表达可变事情/任务的。

如Java里边的AWT。 我们使用
addJButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
//回调
}
}

可以参考个案例
[url]http://jinnianshilongnian.iteye.com/blog/1685963[/url]
spring dao提供了一致的DAO抽象
Callback:定义可变行为,即不可预知行为(命令设计模式)
Template:提供模板支持,简化开发Support:提供对Template的支持,提供一组简便方法,并提供获取Template的方法

大体上是,之所以说"大体上",是因为java语言的机制并未提供类似 函数指针、委托 之类的机制,而用接口作出的变形,是广义上的 函数回调机制
需要指出的是,LZ对 回调函数 的理解有所偏差,回调并非指被调用函数返回去调用调用函数,而是说,被调用函数不知道未来会具体的执行内容,但预留了一块供调用者填空...我也不是能很清楚表述
如果一门语言提供了类似 函数指针 的机制,表现 函数回调 的机制就比较容易明白了,我用JS表达一下.

[code="js"]
function mA(a,b)
{
alert(a+b);
}

function mB(a,b)
{
alert(a*b);
}

function mC(a,b,callback)
{
callback(a,b);
}

mC(1,2,mA);
mC(1,2,mB);

[/code]