tonglin0325的个人主页

Java观察者设计模式

在java.util包中提供了Observable类Observer接口,使用它们即可完成观察者模式

 

 

多个观察者都在关注着价格的变化,只要价格一有变化,则所有的观察者会立即有所行动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import java.util.Observable;
import java.util.Observer;

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;
}

}

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());
}
}

}

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); //输出房子的价格
}

}