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添加观察者。

Java Observer 观察者
 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 观察者

 

相关文章:

  • 2022-12-23
  • 2021-11-14
  • 2021-08-31
  • 2021-06-22
  • 2021-12-28
  • 2021-08-11
  • 2021-05-03
猜你喜欢
  • 2021-09-29
  • 2021-12-24
  • 2022-01-06
  • 2021-11-09
  • 2022-12-23
  • 2021-10-07
相关资源
相似解决方案