觀察者模式又叫作發布-訂閱模式(publish-subscribe),模型-視圖(model-view)模式,源-監聽者(source-listener)模式,或者從屬者(dependents)模觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態上發生改變時,會通知所有的觀察者對象,使他們能夠自動更新自己。
實現類圖:

java提供了觀察者模式的相關類:
java.util.observer
java.util.observable
應用類圖如下:

其中需要用戶自己實現Watched類和Watcher類。
Client應用代碼如下:
public class Client
{
static PRivate Watched watched;
static private Observer watcher;
public static void main(String[] args)
{
watched = new Watched();
watcher = new Watcher(watched);
watched.changeData("In C, we create bugs.");
watched.changeData("In Java, we inherit bugs.");
watched.changeData("In Java, we inherit bugs.");
watched.changeData("In Visual Basic, we visualize bugs.");
}
}
大家要注意,觀察者模式是給觀察對象設置觀察者,而不是給觀察者設定觀察對象。故觀察對象中需要有個Container存放觀察者。但是上面應用為什么在構造觀察者時給了一個觀察對象參數呢?而不是把觀察者作為參數賦給觀察對象?
watcher = new Watcher(watched);
實際上你也可以構造一個沒有參數的觀察者,然后把這個觀察者加入觀察對象中。addObserver(o:Observer)
這里用了一個的編程技巧,在觀察者的構造方法中調用了此方法。
新聞熱點
疑難解答