java: 观察者模式:Observable被观察者,Observer观察者
以房子价格为例,卖房者为被观察者:
import java.util.Observable;
//被观察者子类化
public class House extends Observable {
private float price;
public House(float price)
{
this.price = price;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
//通知内容已经被修改
super.setChanged();
//一旦价格修改成功,那么应该通知观察者
this.price = price;
//通知所有观察者
super.notifyObservers(price);
}
public String toString()
{
return "房子";
}
}
买房者为观察者:
import java.util.Observable;
import java.util.Observer;
//实现观察者接口
public class Person implements Observer {
@Override
public void update(Observable o, Object arg) {
// TODO 自动生成的方法存根
//当被观察者发生变化,观察者立马能接受都信息
System.out.println( o + " ****** 房子的价格已经发生改变" + arg);
}
}
实例被观察者,与观察者:
public class ObserverDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//实例化被观察者
House h = new House(3000.00f);
//实例化观察者
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();
//增加观察者
h.addObserver(p1);
//增加观察者
h.addObserver(p2);
//增加观察者
h.addObserver(p3);
//被观察者价格发生改变
h.setPrice(4000.00f);
}
}