观察者设计模式用于建立一种对象之间的依赖关系,当一个对象发生改变时自动通知其他对象,其他对象相应做出反应。
在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(); } }
