Java提供了Observer模式的默认实现,下面我们就看一下Java对观察者模式的支持。 
    Java对观察者模式的支持主要体现在Observable类和Observer接口。 
(1) Observable  类代表 被观察者 (java.util.Observable ) 
    主要方法有: 
    void setChanged() : 设置被观察者的状态已经被改变
    void addObserver(Observer  observer) : 添加观察者
    int countObservers() : 返回所有观察者的数目
    void deleteObserver(Observer  observer) :删除指定观察者 
    void deleteObservers() : 删除所有观察者
    boolean hasChanged() : 被观察者的状态是否被改变,如果是则返回true,否则返回false
    void notifyObservers()  : 通知所有观察者(没有参数) 
    void notifyObservers(Object arg) : 通知所有观察者(带参数,参数一般设定为被改变的属性)
    void clearChanged() :清除被观察者状态的改变(即调用 hasChanged() 时会返回 false) 
(2) Observer 接口代表 观察者 (java.util.Observer ) 
    它只有一个抽象方法需要被具体的观察者类实现(很重要 ): 
    void update(Observable observable, Object arg) :当 被观察者 调用 notifyObservers(*) 方法时,会根据被观察者的hasChanged() 方法来判断它的状态是否被改变,如果被观察者的状态被改变了,则会调用观察者的update方法,参数observable 为 被观察者对象,arg 为调用notifyObservers(Object arg) 时传入的参数arg ,如果调用的是notifyObservers() 方法, 则arg为null(注意:应该把这个参数arg设定为被观察者的被改变的属性)。
下面是一个例子:
运行结果:
 客户<Jerry> : 洗衣粉的价格变了,2.5元了 ! 客户<Tom> : 洗衣粉的价格变了,2.5元了 ! 客户<Jerry> : 洗衣粉的价格变了,3.0元了 ! 客户<Tom> : 洗衣粉的价格变了,3.0元了 !  
代码里面有一个地方需要着重提一下,就是Good这个类里的serPrice()这个方法,在这个方法里面,调用this.notifyObservers(price)之前一定要调用this.setChanged()方法,因为只有这样,this.notifyObservers(price)这个方法才会去调用update()。
 
                   
                   
                   
                   
                             本文详细介绍了Java中观察者模式的实现方式,包括Observable类和Observer接口的具体使用方法,并通过一个商品价格变动的例子展示了如何利用观察者模式进行事件通知。
本文详细介绍了Java中观察者模式的实现方式,包括Observable类和Observer接口的具体使用方法,并通过一个商品价格变动的例子展示了如何利用观察者模式进行事件通知。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   132
					132
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            