Java Observer 观察者

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

Java Observer 观察者

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 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值