Java常用类库--观察者设计模式( Observable类Observer接口)

原文链接:http://www.2cto.com/kf/201310/253013.html

Java常用类库--观察者设计模式( Observable类Observer接口)_第1张图片

如果要想实现观察者模式,则必须依靠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
import java.util.* ; 
class House extends Observable{ // 表示房子可以被观察 
     private float price ; // 价钱 
     public House( float price){ 
         this .price = price ; 
    
     public float getPrice(){ 
         return this .price ; 
    
     public void setPrice( float price){ 
         // 每一次修改的时候都应该引起观察者的注意 
         super .setChanged() ;    // 设置变化点 
         super .notifyObservers(price) ; // 价格被改变 
         this .price = price ; 
    
     public String toString(){ 
         return "房子价格为:" + this .price ; 
    
};  
class HousePriceObserver implements Observer{ 
     private String name ; 
     public HousePriceObserver(String name){ // 设置每一个购房者的名字 
         this .name = name ; 
    
     public void update(Observable o,Object arg){ 
         if (arg instanceof Float){ 
             System.out.print( this .name + "观察到价格更改为:" ) ; 
             System.out.println(((Float)arg).floatValue()) ; 
        
    
}; 
public class ObserDemo01{ 
     public static void main(String args[]){ 
         House h = new House( 1000000 ) ; 
         HousePriceObserver hpo1 = new HousePriceObserver( "购房者A" ) ; 
         HousePriceObserver hpo2 = new HousePriceObserver( "购房者B" ) ; 
         HousePriceObserver hpo3 = new HousePriceObserver( "购房者C" ) ; 
         h.addObserver(hpo1) ; 
         h.addObserver(hpo2) ; 
         h.addObserver(hpo3) ; 
         System.out.println(h) ; // 输出房子价格 
         h.setPrice( 666666 ) ;    // 修改房子价格 
         System.out.println(h) ; // 输出房子价格 
    
};

 

 
运行结果:
房子价格为:1000000.0
购房者C观察到价格更改为:666666.0
购房者B观察到价格更改为:666666.0
购房者A观察到价格更改为:666666.0
房子价格为:666666.0

你可能感兴趣的:(observer)