观察者模式分为两块
- 消息中心
- 订阅者
大体模式为,订阅者在消息中心订阅自己喜欢的主题。当订阅的主题发生变化时,消息中心会推送相应的更新消息到订阅者手中。这里消息中心中可以有很多主题。这边只拿一个主题来举例。
主题接口中,提供方法供给订阅者订阅主题,和取消订阅主题、以及一个通知所有订阅者的通知方法package com.chapter.two;public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers();}
而订阅者就相对简单,只有一个通知推送方法供主题去推送
package com.chapter.two;public interface Observer { void update();}
对于主题接口的具体实现主题,实现起来也相对简单,维护一个订阅者的集合
package com.chapter.two;import java.util.ArrayList;import java.util.List;public class WeatherData implements Subject { private Listobservers = new ArrayList (); private boolean status = false; //设置一个状态,当想要更新的时候,必须先要去把状态字段置为true public void setStatus() { this.status = true; } //当需要推送消息时,先判断一把状态,如果状态正常,就去推送给所有的订阅者 public void setChanges(){ if(status){ notifyObservers(); } status = false; } @Override public void registerObserver(Observer observer) { observers.add(observer); } @Override public void removeObserver(Observer observer) { observers.remove(observer); } @Override public void notifyObservers() { for (Observer sObserver : observers) { //这里为具体实现订阅者的update方法 sObserver.update(); } }}