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]