
概述
观察者模式是一个非常常见的一个模式,在Android开发中如果说你没遇到我是非常不信的,它是一种一对多的关系,多个对象监听某个目标对象的事件,当目标对象的事件发生的时候,所有监听这个事件的对象都将得到通知,并执行对应的方法。这种模型会把目标对象自身通过方法传递给观察者,这样观察者就可以通过这个引用来获取了。
具体的目标实现对象需要维护观察者的注册信息,最常用的就是通过ArrayList来维护,
在事件发生后更新完所有的状态再执行通知监听对象的动作。
数据传递的两种方式
在观察者模式中数据传递有两种方式:
- 推模型:
目标对象主动向观察者推送目标的详细信息,不管观察者是否需要,推送的信息是对象的全部或者部分数据。 
- 拉模型:
目标对象在通知观察者的时候,只传少量信息,如果观察者需要具体的信息,由观察者主动到目标对象中获取,相当于是观察者从目标对象中拉数据。 
监听者需要将自己自身注册到目标实现对象中,并且实现观察者接口。
public interface Observer {     public void update(Subject subject); } 
  | 
 
public class ConcreObserver implements Observer{     @Override     public void update(Subject subject) {         System.out.println("The Subject Status is :" + subject.getStatus());     } } 
  | 
 
import java.util.ArrayList; public class Subject {     private String mStatus = null;     private ArrayList<Observer> observerlist = new ArrayList<>();     public void registerObserver(Observer observer) {         observerlist.add(observer);     }     public void unregisterObserver(Observer observer) {         observerlist.remove(observer);     }     public String getStatus() {         return mStatus;     }        public void setStatus(String status) {         this.mStatus = status;         for(Observer observer: observerlist) {             observer.update(this);         }     } }
   | 
 
public class Client {     public static void main(String args[]) {         Observer observer = new ConcreObserver();         Subject subject = new Subject();         subject.registerObserver(observer);         subject.setStatus("new Status");         subject.unregisterObserver(observer);         subject.setStatus("new new Status");     } }  
  |