被观察者
package com;
import java.util.Observable;
/**
* 被观察者
*/
public class Pub extends Observable {
private static String name="hello:";
private static Pub pub = null;
private Pub() {
}
public static String getName() {
return name;
}
public static Pub getInstance() {
if (pub == null) {
pub = new Pub();
}
return pub;
}
public void publish(Eve eve) {
System.out.println(eve.getVersion() + " " + eve.getContent());
setChanged();
notifyObservers(eve);
}
}
观察者
package com;
import java.util.Observable;
import java.util.Observer;
/**
* 观察者
*/
public class Obs implements Observer {
@Override
public void update(Observable o, Object arg) {
Pub pub = (Pub) o;
Eve mod = (Eve) arg;
System.out.println(pub.getName() + " " + mod.getVersion() + " " + mod.getContent());
}
}
事件
package com;
/**
* 事件
*/
public class Eve {
private String version;
private String content;
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
主类
package com;
public class Main {
public static void main(String[] args) {
Pub pub=Pub.getInstance();//被观察者
Obs obs=new Obs();//观察者
Obs obs1=new Obs();//观察者
pub.addObserver(obs1);
pub.addObserver(obs);
Eve eve=new Eve();//事件
eve.setVersion("0.01");
eve.setContent("第一个版本");
pub.publish(eve);//被观察者发布事件
}
}
观察者需要实现Observer并重写update方法
被观察者需要实现Observable ,主要是通过setChanged, notifyObservers方法将事件传递给观察者,其中在notifyObservers方法中会调用update方法。
被观察者中加入观察者,当有事件发生时,只需被观察者载入事件,那么事件将会被通知到观察者。