观察者模式原理很简单,当被观察者发生某个消息时,由观察者调用注册过的观察者的某个方法,将消息通知给观察者。
这也可以说是一种发布定阅模式。Java JDK为实现观察者模式提供了相关的接口、抽象类
有如下场景,发布者可以讲笑话、唱歌、讲故事,定阅者接收以上信息。可以有多个发布者、多个定阅者,并且是多对多的关系。
1、Observable抽象类、Observer接口实现方式
基本的实现过程是被观察者实现从Observable抽象类扩展,观察者实现Observer接口,代码如下:
package com.zhangxf.observer;
import java.util.Observable;
import java.util.Observer;
import java.util.Vector;
// 发布者,由Observable类扩展而来
class Publisher extends Observable {
private String name;
public Publisher(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void sayJoke(int joke) {
System.out.println("Publisher " + name + " say a joke:" + joke);
setChanged();
notifyObservers(joke);
}
public void singSong(float song) {
System.out.println("Publisher " + name + " sing a song:" + song);
setChanged();
notifyObservers(song);
}
public void sayStory(String story) {
System.out.println("Publisher " + name + " say a story:" + story);
setChanged();
notifyObservers(story);
}
}
// 定阅者,实现Observer接口
class Subscriber implements Observer {
private String name;
private Vector<Publisher> publishers;
public S