下面是View的OnClickListener监听机制的基本模型:
public class A { private CallBack callback; //注册一个事件 public void register(CallBack callback){ this.callback = callback; } }
protected void onCreate(Bundle savedInstanceState) {
A a = new A();
a.register(new CallBack() {
@Override
public void onCall(View v) {
System.out.println("回调函数被调用");
}
});
}
原理说明:当被调用类的应答方法由自己实现时,不便于复用。因为,每个调用者可能有不同的应答要求,最好的办法就是谁调用,那就由谁来实现具体的应答。所以,我们将被调用类(者)的应答独立抽象出来,形成了回调类CallBack,CallBack类只做一件事就是替被调用者做应答,具体就是onCall(View v)方法来做。
好比:演员张三有一张嘴,这张嘴说什么,不由张三控制,而是把嘴抽象出来,交由观众控制来实现(new CallBack())。观众可以是李四,可以是王五,每个人可以有不同的实现。但这种实现是一对一的关系,是一种特殊的观察者模式。观察者模式是一对多。