先看看java中的回调函数,java中很多模式和它类似,有访问者,观察者等模式。ioc等也有这个类似的原理。
Java-代码
тест публичного класса {
/**
* @param аргументы
*/
public static void main(String[] args) {
// TODO Автоматически сгенерированная заглушка метода
новый Test().doExecute(новый CallBack(){
общественный недействительный выполнение () {
System.out.println("Пропускной режим....");
}
});
}
частная пустота doExecute (CallBack callBack) {
System.out.println("Вызов.....");
callBack.execute();
System.out.println("回调后...");
}
}
Тест публичного класса {
/**
* @param аргументы
*/
public static void main(String[] args) {
// TODO Автоматически сгенерированная заглушка метода
новый Test().doExecute(новый CallBack(){
public void Execute() {
System.out.println("Пропускной режим....");
}
});
}
Private void doExecute(CallBack callBack) {
System.out.println("回调前.....");
callBack.execute();
System.out.println("回调后...");
}
} 输出结果为:
Java-代码
回调前.....
正在执行....
回调后.....
回调前.....
正在执行....
回调后.....这里充分的体现了不是我来调用你,而是你来调用我。
这里的我就是“doExecute”,你就是" выполнить"
回调可以用在哪些地方呢?
1, 比如著名的ioc的事务处理就是这样的,每个方法的事务处理都是一样的, 都是些开始一个事务, 用try, 包住, 等等, 以不管他们, 变的只是要执行方法的不同,比如存储,删除,查询什么的。
2, 可以减少写类, 一个接口, 可以有很多的实现类, 在回调里面, 就成了匿名的了。著名的jive 里面DatabaseObjectFactory 就是这个用法。
Java-代码
интерфейс DatabaseObjectFactory {
/**
* Возвращает объект, связанный с идентификатором или нулем, если
* объект не может быть загружен.
*
* @param id — идентификатор загружаемого объекта.
* @return объект, указанный по идентификатору или нулю, если это невозможно
* быть загруженным.
*/
общедоступный объект loadObject (длинный идентификатор);
}
интерфейс DatabaseObjectFactory {
/**
* Возвращает объект, связанный с идентификатором или нулем, если
* объект не может быть загружен.
*
* @param id — идентификатор загружаемого объекта.
* @return объект, указанный по идентификатору или нулю, если это невозможно
* быть загруженным.
*/
общедоступный объект loadObject (длинный идентификатор);
}
外面调用的根据id不同产生任何你想要的对象。
Использование JavaScript в формате Javascript:
Js代码
функция Тест()
{
вар self = это;
this.func1=функция()
{
self.test2(function (){ alert('正在执行');})
}
}
Test.prototype.test2=функция(функция)
{
alert("Необходимый вызов");
если (функция)
функция();
alert("回调后做些东西");
}
функция Тест()
{
вар self = это;
this.func1=функция()
{
self.test2(function (){ alert('正在执行');})
}
}
Test.prototype.test2=функция(функция)
{
alert("Необходимый вызов");
если (функция)
функция();
alert("回调后做些东西");
}
HTML-код:
Html代码
<html>
<голова>
<script type=text/javascript src="1.js">
</скрипт>
<скрипт>
новый Тест().func1();
</скрипт>
</голова>
<тело>
</тело>
</html>
<html>
<голова>
<script type=text/javascript src="1.js">
</скрипт>
<скрипт>
новый Тест().func1();
</скрипт>
</голова>
<тело>
</тело>
</html>
-скрипты для Javascript, файлы Javascript,
JavaEye, Javascript, Javascript, Javascript, Javascript, Javascript, Javascript, Javascript 。