先看看java中的回调函数,java中很多模式和它类似,有访问者,观察者等模式。ioc等也有这个类似的原理。
Programa Java
Prueba de clase pública {
/**
* argumentos @param
*/
público estático vacío principal (String [] argumentos) {
// TODO Código auxiliar de método generado automáticamente
nueva prueba().doExecute(nueva devolución de llamada(){
ejecución nula pública() {
System.out.println("正在执行....");
}
});
}
privado vacío doExecute (devolución de llamada de devolución de llamada) {
System.out.println("回调前.....");
callBack.execute();
System.out.println("回调后.....");
}
}
Prueba de clase pública {
/**
* argumentos @param
*/
público estático vacío principal (String [] argumentos) {
// TODO Código auxiliar de método generado automáticamente
nueva Prueba().doExecute(nueva CallBack(){
ejecución nula pública() {
System.out.println("正在执行....");
}
});
}
private void doExecute(CallBack callBack) {
System.out.println("回调前.....");
callBack.execute();
System.out.println("回调后.....");
}
} 输出结果为:
Programa Java
回调前.....
正在执行....
回调后.....
回调前.....
正在执行....
回调后.....这里充分的体现了不是我来调用你,而是你来调用我。
这里的我就是“doExecute”,你就是"ejecutar"
回调可以用在哪些地方呢?
1,比如著名的ioc的事务处理就是这样的,每个方法的事务处理都是一样的,都是些开始一个事务,用try包住,等等,所以就可以不管他们,变的只是要执行方法的不同,比如存储,删除,查询什么的.
2,可以减少写类,一个接口,可以有很多的实现类,在回调里面,就成了匿名的了。著名的jive里面DatabaseObject. Fábrica 就是这个用法。
Programa Java
interfaz DatabaseObjectFactory {
/**
* Devuelve el objeto asociado con id o null si el
* el objeto no se pudo cargar.
*
* @param id el id del objeto a cargar.
* @return el objeto especificado por id o null si no pudo
* estar cargado.
*/
objeto público loadObject (identificación larga);
}
interfaz DatabaseObjectFactory {
/**
* Devuelve el objeto asociado con id o null si el
* el objeto no se pudo cargar.
*
* @param id el id del objeto a cargar.
* @return el objeto especificado por id o null si no pudo
* estar cargado.
*/
objeto público loadObject (identificación larga);
}
外面调用的根据id不同产生任何你想要的对象.
Configuración de javascript:
Js代码
función prueba()
{
var self=esto;
this.func1=función()
{
self.test2(función (){ alerta('正在执行');})
}
}
Test.prototype.test2=función(func)
{
alerta("回调前做些东西");
si (función)
función();
alerta("回调后做些东西");
}
prueba de función()
{
var self=esto;
this.func1=función()
{
self.test2(función (){ alerta('正在执行');})
}
}
Prueba.prototipo.test2=función(función)
{
alerta("回调前做些东西");
si (función)
función();
alerta("回调后做些东西");
}
然后,在html里面:
HTML代码
<html>
<cabeza>
<tipo de script=texto/javascript src="1.js">
</script>
<guión>
nueva Prueba().func1();
</script>
</cabeza>
<cuerpo>
</cuerpo>
</html>
<html>
<cabeza>
<tipo de script=texto/javascript src="1.js">
</script>
<guión>
nueva Prueba().func1();
</script>
</cabeza>
<cuerpo>
</cuerpo>
</html>
javascript的回调都差不多。
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。