理解: 观察者模式简单的理解就是新建一个接口,在需要使用该接口的地方实现该接口。在需要告诉该接口的具体方法中实现该接口实例,并调用需要使用的方法,这就是所谓的订阅
观察者原理:把注册为观察者的用户,有更新就发送给他们。
/**
* 天气站
* 实现一个主题接口,用于管理天气预报接口着的管理
*
*/
public class WeatherStation implements Subject {
// 订阅信息的观察者,写一个管理器比较好,但这里只是简单讲解 观察者模式
List<Observer> userList = new ArrayList();
private String weather;
public String getWeather() {
return weather;
}
public void setWeather(String weather) {
this.weather = weather;
}
//天气预报有更新, 发送天气预报告诉观察者(用户)
public void sendWeather( ){
//在需要告诉该接口的具体方法中实现该接口实例,并调用具体方法up,这样在实现了Observer 的 WeatherUser 中的 up就能收到消息
for(Observer o :userList ){
o.up(getWeather());
}
}
..... 简略
//在需要告诉该接口的具体方法中实现该接口实例
public void addObserver(){
}
}
/**
* 订阅天气预报的用户
* 实现一个观察者接口
* 在需要使用该接口的地方实现该接口 用户需要订阅天气预报,实现该接口
*/
public class WeatherUser implements Observer {
@Override
public void up(String data) {
System.out.println("data = " +data);
}
}
/**
* 主题
* 天气预报订阅者管理
* 比如 注册为观察者 删除观察者等
*/
public interface Subject {
void sendWeather();
}
/**
* 观察者
*/
public interface Observer {
/**
* 天气预报更新,这个方法接受
* @param data
*/
void up(String data);
}
为了让新手方便看清楚观察者的原理,我尽量写少代码,只是写出关键的代码
Subject : 代码是进行观察者的管理,实际中非常有必要,但是目前要的是突出观察者原理
Observer : 观察者(内容接收者),提供一个 up 方法更新(接收内容)
上面说的本质就是1.获取到观察者的实例
2.在有更新的时候,调用更新相关的方法即可
实现
public static void main(String[] args){
// 1.
WeatherStation w = new WeatherStation();
w.sendWeather();
// 2. 面向接口编程
Subject w = new WeatherStation();
w.sendWeather();
}
是不是很简单,哈哈哈