先看看java中的回调函数,java中很多模式和它类似,有访问者,观察者等模式。ioc等也有这个类似的原理。
Java
teste de classe pública {
/**
* @param argumentos
*/
public static void main(String[] args) {
// TODO stub de método gerado automaticamente
novo Teste().doExecute(new CallBack(){
public void executar() {
System.out.println("正在执行....");
}
});
}
private void doExecute(CallBack callBack) {
System.out.println("回调前.....");
callBack.execute();
System.out.println("回调后.....");
}
}
teste de classe pública {
/**
* @param argumentos
*/
public static void main(String[] args) {
// TODO stub de método gerado automaticamente
novo Teste().doExecute(new CallBack(){
public void execute() {
System.out.println("正在执行....");
}
});
}
private void doExecute(CallBack callBack) {
System.out.println("回调前.....");
callBack.execute();
System.out.println("回调后.....");
}
} 输出结果为:
Java
回调前.....
正在执行....
回调后.....
回调前.....
正在执行....
回调后.....这里充分的体现了不是我来调用你,而是你来调用我。
这里的我就是“doExecute”,你就是"executar"
回调可以用在哪些地方呢?
1,比如著名的ioc的事务处理就是这样的,每个方法的事务处理都是一样的,都是些开始一个事务,用try包住,等等,所以就可以不管他们,变的只是要执行方法的不同,比如存储,删除,查询什么的。
2,可以减少写类,一个接口,可以有很多的实现类,在回调里面,就成了匿名的了。著名的jive里面Database ObjectFactory é responsável por isso.
Java
interface DatabaseObjectFactory {
/**
* Retorna o objeto associado ao id ou null se o
*o objeto não pôde ser carregado.
*
* @param id o id do objeto a ser carregado.
* @return o objeto especificado por id ou null se não puder
* estar carregado.
*/
objeto público loadObject (id longo);
}
interface DatabaseObjectFactory {
/**
* Retorna o objeto associado ao id ou null se o
*o objeto não pôde ser carregado.
*
* @param id o id do objeto a ser carregado.
* @return o objeto especificado por id ou null se não puder
* estar carregado.
*/
objeto público loadObject (id longo);
}
外面调用的根据id不同产生任何你想要的对象。
Usando javascript:
Js代码
função Teste()
{
var self = isto;
this.func1=função()
{
self.test2(function (){ alert('正在执行');})
}
}
Test.prototype.test2=função(func)
{
alert("回调前做些东西");
se(função)
função();
alert("回调后做些东西");
}
função Teste()
{
var self = isto;
this.func1=função()
{
self.test2(function (){ alert('正在执行');})
}
}
Test.prototype.test2=função(func)
{
alert("回调前做些东西");
se(função)
função();
alert("回调后做些东西");
}
然后,在html里面:
HTML代码
<html>
<cabeça>
<script type=text/javascript src="1.js">
</script>
<roteiro>
novo Teste().func1();
</script>
</head>
<corpo>
</body>
</html>
<html>
<cabeça>
<script type=text/javascript src="1.js">
</script>
<roteiro>
novo Teste().func1();
</script>
</head>
<corpo>
</body>
</html>
Java 和 JavaScript 的回调都差不多。
声明: Javaeye 文章版权属于作者 , 受法律保护。没有作者书面许可不得转载。