概述
观察者模式是一个非常常见的一个模式,在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"); } }
|