观察者模式
有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者同时监听某一个主题。这个主题在状态发生变化时,会通知所有观察者,使它们能够自动更新自己。
在java中提供了Observable和Observer两个接口,使用他们就可以完成观察者模式。
需要被观察的类必须继承Observable类。该类中常用的方法有addObserver,deleteObserver,setChanged(),notifyObservers(Object org);
每一个观察者必须实现Observer接口,并覆写接口中的唯一的方法update(Observable o,Object obj)。
java代码例子如下:
import java.util.Observable;
import java.util.Observer;
class House extends Observable{
private float price;
public House(float price){
this.price = price;
}
public void setPrice(float price){
super.setChanged();
super.notifyObservers(price);
this.price = price;
}
public float getPrice(){
return this.price;
}
public String toString(){
return "The price of House :" + this.getPrice();
}
}
class HousePriceObserver implements Observer{
private String name;
public HousePriceObserver(String name){
this.name = name;
}
public void update(Observable ob,Object obj){
if(obj instanceof Float){
System.out.print(this.name);
System.out.println(((Float)obj).floatValue());
}
}
}
public class ObserDemo{
public static void main(String[]args){
House h = new House(10000);
HousePriceObserver h1 = new HousePriceObserver("lixiaoyan");
HousePriceObserver h2 = new HousePriceObserver("jizenghui");
HousePriceObserver h3 = new HousePriceObserver("weilin");
h.addObserver(h1);
h.addObserver(h2);
h.addObserver(h3);
System.out.println(h);
h.setPrice(12000.00f);
System.out.println(h);
}
}