观 察 者 模 式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
下面是House.java的代码:
package com.flyingh.observable;
import java.util.Observable;
public class House extends Observable {
private float price;
public House() {
super();
}
public House(float price) {
super();
this.price = price;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
setChanged();
notifyObservers(price);
}
}
下面是观察者ZhangSan.java的代码:
package com.flyingh.observer;
import java.util.Observable;
import java.util.Observer;
public class ZhangSan implements Observer {
private Observable house;
public ZhangSan(Observable house) {
super();
this.house = house;
house.addObserver(this);
}
public Observable getHouse() {
return house;
}
public void setHouse(Observable house) {
this.house = house;
}
@Override
public void update(Observable o, Object arg) {
// TODO Auto-generated method stub
System.out.println("zhangsan:" + arg);
}
}
下面是观察者LiSi.java的代码:
package com.flyingh.observer;
import java.util.Observable;
import java.util.Observer;
public class LiSi implements Observer {
private Observable house;
public LiSi(Observable house) {
super();
this.house = house;
house.addObserver(this);
}
public Observable getHouse() {
return house;
}
public void setHouse(Observable house) {
this.house = house;
}
@Override
public void update(Observable o, Object arg) {
// TODO Auto-generated method stub
System.out.println("lisi:" + arg);
}
}
下面是观察者WangWu.java的代码:
package com.flyingh.observer;
import java.util.Observable;
import java.util.Observer;
public class WangWu implements Observer {
private Observable house;
public WangWu(Observable house) {
super();
this.house = house;
house.addObserver(this);
}
public Observable getHouse() {
return house;
}
public void setHouse(Observable house) {
this.house = house;
}
@Override
public void update(Observable o, Object arg) {
// TODO Auto-generated method stub
System.out.println("wangwu:" + arg);
}
}
下面是Client.java的代码:
package com.flyingh.client;
import com.flyingh.observable.House;
import com.flyingh.observer.LiSi;
import com.flyingh.observer.WangWu;
import com.flyingh.observer.ZhangSan;
public class Client {
public static void main(String[] args) {
House house = new House(1500);
new ZhangSan(house);
new LiSi(house);
new WangWu(house);
house.setPrice(2000);
}
}
程序运行结果如下:
wangwu:2000.0
lisi:2000.0
zhangsan:2000.0