有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
有一个主题为时间,各种手表希望在时间变化时收到通知,并做出处理。
//继承后Observable可以添加观察者,并发送通知
public class Time extends Observable {
//主题的状态
private Date date;
//状态改变
public void setDate(Date date) {
this.date = date;
setChanged();//标记状态改变
notifyObservers(date); //通知观察者,并发送状态
}
public Date getDate() {
return date;
}
}
//实现观察者接口,可以收到通知
public class Watch implements Observer {
//关注的状态
private Date date;
@Override
//通知函数
public void update(Observable o, Object arg) {
date = (Date)arg;
play();
}
//收到通知后处理
public void play(){
System.out.println("当前时间为"+date);
}
}
public class CurrentTime {
@Test
public void method() {
Time time = new Time();//创建主题类
Watch watch = new Watch();//创建观察者
time.addObserver(watch);//为当前主题类添加观察者
time.setDate(new Date());//主题状态改变,watch打印Wed Jul 13 17:34:38 CST 2016
}
}