观察者设计模式用于建立一种对象之间的依赖关系,当一个对象发生改变时自动通知其他对象,其他对象相应做出反应。
在Android系统中对事件的监听,其实也是一种观察者模式,(一个观察者,多个观察对象)观察者是系统,被观察者是每一个控件,当控件状态改变时,会通知系统执行去执行具体的任务,任务的内容由我们去指定(通过系统回调我们实现的抽象方法),核心还是回调方法(感觉回调方法在框架里扮演了重要角色)
典型代码:(一个观察目标,多个观察者)
抽象出目标对象的接口,里面有通知方法
abstract class Subject {
//定义一个观察者集合用于存储所有观察者对象
protected ArrayList observers<Observer> = new ArrayList();
//注册方法,用于向观察者集合中增加一个观察者
public void attach(Observer observer) {
observers.add(observer);
}
//注销方法,用于在观察者集合中删除一个观察者
public void detach(Observer observer) {
observers.remove(observer);
}
//声明抽象通知方法
public abstract void notify();
}
抽象出观察者接口,由具体的实现类去实现不同的响应方法,该方法由观察对象调用
interface Observer {
//声明响应方法
public void update();
}
具体目标实现类
class ConcreteSubject extends Subject {
//实现通知方法
public void notify() {
//遍历观察者集合,调用每一个观察者的响应方法
for(Object obs:observers) {
((Observer)obs).update();
}
}
}
具体观察者,实现update()方法
class ConcreteObserver implements Observer {
//实现响应方法
public void update() {
//具体响应代码
}
//通知控制中心,调用notify()方法
public void sendMessage(Observer observer){
observer.notify();
}
}
测试代码
class Client {
public static void main(String args[]) {
//定义观察目标对象
Subject sub;
sub = new Subject();
//定义观察者对象
Observer ob1,ob2;
ob1 = new ConcreteSubject();
sub.add();
ob2 = new ConcreteSubject();
sub.add();
//某成员发送消息
ob1.sendMessage();
}
}