先看看java中的回调函数,java中很多模式和它类似,有访问者,观察者等模式。ioc等也有这个类似的原理。
Java代码
Test de classe publique {
/**
* @param arguments
*/
public static void main (String[] arguments) {
// TODO Stub de méthode généré automatiquement
nouveau Test().doExecute(nouveau CallBack(){
public void exécuter() {
System.out.println("正在执行....");
}
});
}
private void doExecute (CallBack callBack) {
System.out.println("回调前...");
callBack.execute();
System.out.println("回调后...");
}
}
Test de classe publique {
/**
* @param arguments
*/
public static void main (String[] arguments) {
// TODO Stub de méthode généré automatiquement
new Test().doExecute(new CallBack(){
public void perform() {
System.out.println("正在执行....");
}
});
}
private void doExecute(CallBack callBack) {
System.out.println("回调前.....");
callBack.execute();
System.out.println("回调后...");
}
} 输出结果为:
Java代码
回调前.....
正在执行....
回调后.......
回调前.....
正在执行....
"doExecute", et "execute
"
回调可以用在哪些地方呢?
1,比如著名的coi的事务处理就是这样的,每个方法的事务处理都是一样的,都是些开始一个事务,用try包住,等等,所以就可以不管他们,变的只是要执行方法的不同,比如存储,删除,查询什么的。
2,可以减少写类,一个接口,可以有很多的实现类,在回调里面,就成了匿名的了。著名的jive里面DatabaseObjectF acteur 就是这个用法。
Java代码
interface Base de donnéesObjectFactory {
/**
* Renvoie l'objet associé à id ou null si le
* L'objet n'a pas pu être chargé.
*
* @param id l'identifiant de l'objet à charger.
* @renvoie l'objet spécifié par id ou null s'il ne le peut pas
* être chargé.
*/
objet public loadObject (identifiant long);
}
interface Base de donnéesObjectFactory {
/**
* Renvoie l'objet associé à id ou null si le
* L'objet n'a pas pu être chargé.
*
* @param id l'identifiant de l'objet à charger.
* @renvoie l'objet spécifié par id ou null s'il ne le peut pas
* être chargé.
*/
objet public loadObject (identifiant long);
}
外面调用的根据id不同产生任何你想要的对象。
Utilisation du javascript :
Js
fonction Test()
{
var soi = ceci ;
this.func1=fonction()
{
self.test2(function (){ alert('正在执行');})
}
}
Test.prototype.test2=fonction(func)
{
alert("回调前做些东西");
si (fonction)
fonction();
alert("回调后做些东西");
}
fonction Test()
{
var soi = ceci ;
this.func1=fonction()
{
self.test2(function (){ alert('正在执行');})
}
}
Test.prototype.test2=fonction(func)
{
alert("回调前做些东西");
si (fonction)
fonction();
alert("回调后做些东西");
}
然后,在html里面:
Html代码
<html>
<tête>
<script type=text/javascript src="1.js">
</script>
<script>
nouveau Test().func1();
</script>
</tête>
<corps>
</corps>
</html>
<html>
<tête>
<script type=text/javascript src="1.js">
</script>
<script>
nouveau Test().func1();
</script>
</tête>
<corps>
</corps>
</html>
java
et javascript.