1 java回调机制:
首先解释java回调机制,对象能够携带一些信息,这些信息允许它在稍后的某个时刻调用初始的对象,如果回调是通过指针实现的,那么就只能寄希望程序员不会误用此指针,java更小心仔细,所以没有在语言中包括指针。
回调的价值在于它的灵活性-可以在运行时动态决定需要调用什么方法。
Java代码
import static net.mindview.util.Print.*;
interface Incrementable {
void increment();
}
// Very simple to just implement the interface:
class Callee1 implements Incrementable {
private int i = 0;
public void increment() {
i++;
print(i);
}
}
class Caller {
private Incrementable callbackReference;
Caller(Incrementable cbh) { callbackReference = cbh; }
void go() { callbackReference.increment(); }
}
public class Callbacks {
public static void main(String[] args) {
Callee1 c1 = new Callee1();
Caller caller1 = new Caller(c1);
caller1.go();
caller1.go();
}
}
Caller的构造器需要一个Incrementable的引用作为参数(可以在任意时刻捕获回调的引用),然后再以后的某个时刻,对象 可以使用此引用回调Callee类。
2 观察者模式与回调机制的联系:
首先解释观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
我们上例的回调机制可以把Caller作为一个主题(被观察者),Callee1作为观察者,当Caller调用go()时,通知Callee1的increment()方法改变状态,当然上个例子只是一对一的依赖,我们可以把回调机制是观察者模式的一种变体。
首先解释java回调机制,对象能够携带一些信息,这些信息允许它在稍后的某个时刻调用初始的对象,如果回调是通过指针实现的,那么就只能寄希望程序员不会误用此指针,java更小心仔细,所以没有在语言中包括指针。
回调的价值在于它的灵活性-可以在运行时动态决定需要调用什么方法。
Java代码
import static net.mindview.util.Print.*;
interface Incrementable {
void increment();
}
// Very simple to just implement the interface:
class Callee1 implements Incrementable {
private int i = 0;
public void increment() {
i++;
print(i);
}
}
class Caller {
private Incrementable callbackReference;
Caller(Incrementable cbh) { callbackReference = cbh; }
void go() { callbackReference.increment(); }
}
public class Callbacks {
public static void main(String[] args) {
Callee1 c1 = new Callee1();
Caller caller1 = new Caller(c1);
caller1.go();
caller1.go();
}
}
Caller的构造器需要一个Incrementable的引用作为参数(可以在任意时刻捕获回调的引用),然后再以后的某个时刻,对象 可以使用此引用回调Callee类。
2 观察者模式与回调机制的联系:
首先解释观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
我们上例的回调机制可以把Caller作为一个主题(被观察者),Callee1作为观察者,当Caller调用go()时,通知Callee1的increment()方法改变状态,当然上个例子只是一对一的依赖,我们可以把回调机制是观察者模式的一种变体。