package guanchazhe.cn;
import java.util.Observable;
import java.util.Observer;
/*
* 观察者模式:很多购房者都在关注房价的变化,每当房价发生变化时,所有的购房者都可以看到
* 实现方式:
* 被观察者 必须继承 observable 类, observable 类的常用方法:
* void addObserver(Observer o)
如果观察者与集合中已有的观察者不同,则向对象的观察者集中添加此观察者。
void deleteObserver(Observer o)
从对象的观察者集合中删除某个观察者。
void deleteObservers()
清除观察者列表,使此对象不再有任何观察者。
void notifyObservers()
如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。
void notifyObservers(Object arg)
如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。
p protected void setChanged()
标记此 Observable 对象为已改变的对象;现在 hasChanged 方法将返回 true。
观察者必须实现 Observer 接口,Observer 接口定义如下:
public interface Observer{
public void update(Observable o,Object arg)
}
*/
//被观察者类
class House extends Observable{
private Float price;
public House(Float price) {
super();
this.price = price;
}
public Float getPrice() {
return price;
}
public void setPrice(Float price) {
//设置变化点
super.setChanged();
super.notifyObservers(price);
this.price = price;
}
}
//观察者类
class HousePriceObserver implements Observer{
//观察者姓名
private String name;
public HousePriceObserver(String name) {
super();
this.name = name;
}
//实现update方法
public void update(Observable o,Object arg){
//判断参数类型
if (arg instanceof Float) {
System.out.println(this.name+"观察到的价格变化为");
System.out.println(((Float) arg).floatValue());
}
}
}
public class OberserableDemo {
public static void main(String[] args) {
//被观察着对象
House hs =new House(1000f);
//添加观察者
hs.addObserver(new HousePriceObserver("观察者A"));
hs.addObserver(new HousePriceObserver("观察者B"));
hs.addObserver(new HousePriceObserver("观察者C"));
System.out.println("房子的价格是:"+hs.getPrice());
hs.setPrice(600f);
//System.out.println("现在房子的价格是:"+hs.getPrice());
}
}