首先要说的是JDK已经帮我们定义好了观察者模式的接口,我们如果项目中需要使用观察者模式,只需简单继承一下就可以了。下面的一个例子是,出版社出版了一个杂志,要读者主动订阅。
Publisher.java
public class Publisher extends Observable{
private String magazineName;
public String getMagazineName() {
return magazineName;
}
public void setMagazineName(String magazineName) {
this.magazineName = magazineName;
}
public void publish (String magazineName){
this.magazineName = magazineName;
this.setChanged();
this.notifyObservers(this);
}
}
Reader.java
public class Reader implements Observer {
@Override
public void update(Observable arg0, Object arg1) {
if(arg0 instanceof Publisher){
Publisher publisher = (Publisher)arg0;
System.out.println("有新杂志。我要订阅"+publisher.getMagazineName());
}
}
}
测试类:
public class TestCase {
public static void main(String[] args) {
// TODO Auto-generated method stub
Publisher publisher = new Publisher();
Reader zhangsan = new Reader();
publisher.addObserver(zhangsan);
Reader lisi = new Reader();
publisher.addObserver(lisi);
publisher.publish("程序员第0321期");
//结果
//有新杂志。我要订阅 程序员第0321期
}
}