Java Observer 观察者

2022-11-12,,

http://www.cnblogs.com/jaward/p/3277619.html

1、API

观察者
java.util.Observable;
public class Observable extends Object

void addObserver(Observer o);      如果该观察者集合里面没有这个观察者,添加进去。
protected void clearChanged();      把改变的状态清掉,即表示最近没有发生改变,使hasChanged()返回false
int countObserver();                     返回该Observable对象的观察者个数
void deleteObserver(Observer o);   删除一个观察者
boolean hasChanged();                 查看该Observable是否发生了改变
void notifyObservers();                 先调用hasChanged(),若返回true通知该对象所有观察者,然后用clearChanged()清掉状态
void notifyObservers(Object o);     同上,上面观察者update()接收的是null,这里可以返回想要通知的数据。
protected void setChanged();        设置变化,使到调用hasChanged()会返回true
 

观察者
java.util.Observer
public interface Observer

void update(Observable o, Object arg); 只要发生变化,notifyObservers()就会通知观察者。

2、用法

被观察类需要继承Observable类,在数据改变的地方(如set***();)里加上setChanged(),在需要监听的地方使用notifyObservers(Object o)。

观察者需实现Observer接口,对notifyObservers() 的提醒做出反应。

为Observable添加观察者。

 1 //Test.java
2 import java.util.Observable;
3 import java.util.Observer;
4
5 class Product extends Observable {
6 private String name;
7 private float price;
8
9 public String getName() {
10 return this.name;
11 }
12
13 public void setName(String name) {
14 this.name = name;
15 setChanged();
16 notifyObservers(name);
17 }
18
19 public float getPrice() {
20 return this.price;
21 }
22
23 public void setPrice(float price) {
24 this.price = price;
25 setChanged();
26 notifyObservers(new Float(price));
27 }
28 }
29
30 class NameObserver implements Observer {
31 private String name = null;
32
33 public void update(Observable obj, Object arg) {
34 if (arg instanceof String) {
35 this.name = (String)arg;
36 System.out.println("NameObserver: name change to "+this.name);
37 }
38 }
39 }
40
41 class PriceObserver implements Observer {
42 private float price = 0;
43
44 public void update(Observable obj, Object arg) {
45 if (arg instanceof Float) {
46 price = ((Float)arg).floatValue();
47 System.out.println("PriceObserver: price changte to "+price);
48 }
49 }
50 }
51
52
53 public class Test {
54 public static void main(String args[]) {
55 Product product = new Product();
56
57 NameObserver nameobs = new NameObserver();
58 PriceObserver priceobs = new PriceObserver();
59
60
61 //add observer
62 product.addObserver(nameobs);
63 product.addObserver(priceobs);
64
65
66 product.setName("apple");
67 product.setPrice(9.22f);
68 }
69 }

Java Observer 观察者的相关教程结束。

《Java Observer 观察者.doc》

下载本文的Word格式文档,以方便收藏与打印。