觀察者模式()
一個具體的觀察者實現如下當其監聽的狀態發生改變時update()方法就會被主題回調進而可以在觀察者內部進行業務邏輯的處理
public class ConcreteObserver implements IObserver{
public void update(Event evt){
Systemoutprintln(obserer receives information)
}
}
觀察者模式是如此常用以致於JDK內部就已經為開發人員准備了一套觀察者模式的實現它位於javautil包中包括javautilObservable類和javautilObserver接口它們的關系如圖所示
![](http://tw.wingwit.com/Article/UploadFiles/201311/2013112320010373.jpg)
圖 JDK內置的觀察者模式
注意在JDK中已經實現了一套觀察者模式讀者可以直接復用相關代碼
在javautilObservable類中已經實現了主要的功能如增加觀察者刪除觀察者和通知觀察者開發人員可以直接通過繼承Observable使用這些功能javautilObserver接口是觀察者接口它的update()方法會在javautilObservable的notifyObservers()方法中被回調以獲得最新的狀態變化通常在觀察者模式中Observer接口總是應用程序的核心擴展對象具體的業務邏輯總是會被封裝在update()方法中
在JDK中觀察者模式也得到了普遍的應用一個最典型的應用便是Swing框架的JButton實現它的事件處理機制如圖所示
JButton繼承自AbstractButton在AbstractButton中維護了一組監聽器它們就扮演著被觀察者的角色而AbstractButton本身就是被觀察對象監聽器ActionListener並不是依靠循環監聽去獲取按鈕何時被單擊而是當按鈕被單擊時通過AbstractButton的fireActionPermed()方法回調ActionListeneractionPerformed()方法實現基於這種結構在應用程序開發時只需要簡單地實現ActionListener接口(也就是Observer)並將其添加到按鈕(Subject角色)的觀察者列表中那麼當單擊事件發生就可以自動促發監聽器的業務處理函數下面從觀察者模式的角度分析一段按鈕單擊處理的代碼
[] []
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27817.html