个人博客
http://www.milovetingting.cn
观察者模式
模式介绍
观察者模式是一个使用率非常高的模式。它最常用的地方是GUI系统,订阅-发布系统。
模式定义
定义对象间一种一对多的依赖关系,使得每当一个对象改变时,所有依赖它的对象得到通知并被自动更新。
使用场景
关联行为场景
事件多级触发场景
跨系统的消息交换场景,如消息队列、事件总线的处理机制
简单实现
定义被观察者
1 2 3 4 5 6 7 8 9 10
   | public class ObservableImpl extends Observable {
  	public void notifyChanged() { 		 		setChanged(); 		 		notifyObservers(); 	}
  }
  | 
 
定义观察者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
   | public class ObserverImpl implements Observer {
  	private String name;
  	public ObserverImpl(String name) { 		super(); 		this.name = name; 	}
  	@Override 	public void update(Observable arg0, Object arg1) { 		System.out.println(name + ":收到更新通知"); 	}
  }
  | 
 
调用
1 2 3 4 5 6 7 8
   | public static void main(String[] args) { 		ObservableImpl observable = new ObservableImpl(); 		ObserverImpl observer1 = new ObserverImpl("observer1"); 		ObserverImpl observer2 = new ObserverImpl("observer2"); 		observable.addObserver(observer1); 		observable.addObserver(observer2); 		observable.notifyChanged(); 	}
  | 
 
输出结果
1 2
   | observer2:收到更新通知 observer1:收到更新通知
   | 
 
可以看到,通知时是按照注册时的逆序来通知的,查看源码:
1 2
   | for(int i = aobj.length - 1; i >= 0; i--)             ((Observer)aobj[i]).update(this, obj);
   |