我们知道观察者模式是一对多的关系,一个被观察者与多个观察者之间的关系,而回调模式则是一对一的关系,其实在Android中,大量的使用到了回调模式,比如各种个样的clickListener,还有各种各样的CallBack都是回调模式。下面实现一个简单的回调模式。模仿Android中的按钮点击事件。
定义一个Button.java
package com.test.callback;
public class Button {
private OnClickListener listener;
public void setOnClickListener(OnClickListener listener) {
this.listener = listener;
}
public void click() {
if(listener != null) {
listener.onClick();
}
}
}
interface OnClickListener{
public void onClick();
}
Client.java
package com.test.callback;
public class Client {
public static void main(String[] args) {
Button button = new Button();
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick() {
// TODO Auto-generated method stub
System.out.println("我被调用了");
}
});
button.click();
}
}
执行main方法输出
我被调用了
这里面Button里面只维护一个listener引用,而在观察者模式中则是,维护了一个引用的集合,每次回调会遍历所有的引用,这样看来,回调模式确实是一种特殊的观察者模式。这里面的OnClickListener接口相当于Observer接口,而Button相当于ConcreteObservable。