观察者模式
定义:观察者模式又叫发布订阅模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
典型应用:
1.侦听事件驱动程序设计中的外部事件。
2.侦听/监视某个对象的状态变化。
3.发布者/订阅者模型中,当一个外部事件被触发(新的产品/消息出现)时,通知邮件列表的订阅者。
优点:
对象之间可以进行同步通信,可以同时通知一到多个关联对象,对象之间的关系以松耦合的形式组合,互不依赖。
两个版本:
1.目标对象发生变化时,仅告诉观察者我变化了,变化细节需要自己从目标对象中得到。-------拉模式
2.目标对象发生变化时,通过参数将变化细节一同传递给观察者。 -----推模式
/**
* 观察者模式
* 地球 Earth 被观察者
* 气象卫星Satellite 观察者
* 气象局 Demo 调用者
*/
package Abstract.observer;
import java.util.Observable;
import java.util.Observer;
class Earth extends Observable
{
private String weather = "晴朗";
public String getWeather()
{
return weather;
}
public void setWeather(String weather)
{
this.weather = weather;
//设置变化点
setChanged();
//通知
notifyObservers(weather);
}
}
class Satellite implements Observer
{
private String weather ;
@Override
public void update(Observable o, Object arg)
{
weather = (String)arg;
System.out.println("近期天气变化:"+weather);
}
}
public class Demo
{
public static void main(String[] args)
{
Earth earth = new Earth();
Satellite satellite = new Satellite();
//发射微型 (添加观察者)
earth.addObserver(satellite);
System.out.println("开始播报天气状况:");
System.out.println("--------------------");
earth.setWeather("台风来袭");
earth.setWeather("近期有大到暴雨");
earth.setWeather("暴雨结束,天气晴朗");
}
}