在java.util包中提供了Observable类和Observer接口,使用它们即可完成观察者模式。
多个观察者都在关注着价格的变化,只要价格一有变化,则所有的观察者会立即有所行动。
//=================================================
// File Name : Observer_demo
//------------------------------------------------------------------------------
// Author : Common import java.util.Observable;
import java.util.Observer; // 类名:House
// 属性:
// 方法:
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;
} @Override
public String toString() {
return "房子价格为:" + this.price;
} } //类名:HouseObserver
//属性:
//方法:
class HouseObserver implements Observer{
private String name; //观察者的名字 public HouseObserver(String name) {
super();
this.name = name;
} @Override
public void update(Observable o, Object arg) {
// TODO 自动生成的方法存根
if(arg instanceof Float){ //判断参数类型
System.out.println(this.name+"观察到价格改变为");
System.out.println(((Float)arg).floatValue());
}
} } //主类
//Function : Observer_demo
public class Observer_demo { public static void main(String[] args) {
// TODO 自动生成的方法存根
House h = new House(1000000);
HouseObserver ho1 = new HouseObserver("购房者1");
HouseObserver ho2 = new HouseObserver("购房者2");
HouseObserver ho3 = new HouseObserver("购房者3");
h.addObserver(ho1); //加入观察者
h.addObserver(ho2);
h.addObserver(ho3);
System.out.println(h); //输出房子的价格
h.setPrice(666); //修改房子的价格
System.out.println(h); //输出房子的价格
} }