概述

观察者模式是一个非常常见的一个模式,在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");
}
}
Contents
  1. 1. 概述
  2. 2. 数据传递的两种方式