1. 程式人生 > >java常用設計模式4——觀察者模式

java常用設計模式4——觀察者模式

當被觀察者的狀態傳送改變的時候,所有觀察它的物件都會得到通知並自動更新。
觀察者模式UML圖:
Observe

Subject: 抽象主題。把所有觀察者物件的引用儲存在一個集合裡,每個主題都可以有任意數量的觀察者,抽象主題提供一個介面,可以增加和刪除物件。
ConcreteSubject:具體主題,在具體主題的內部狀態發生改變的時候,給所有註冊過的觀察者發出通知。

Observer:抽象觀察者,是觀察者的抽象類,定義了一個更新介面,使得在得到具體主題更改通知時更新自己。
ConcreteObserver:具體觀察者,該角色實現抽象觀察者角色所有定義的更新介面,以便在具體主題的狀態發生變化的時候更新自己的狀態。

程式碼示例:
觀察者:

public class Guanchazhe implements Observer {

    private String name;

    public Guanchazhe(String name) {
        this.name = name;
    }

    @Override
    public void update(Observable o, Object arg) {
        Log.i("LHD", "update  更新內容 :" + arg);
    }

    @Override
    public
String toString() { return "name = " + name; } }

被觀察者:

public class Beiguanchazhe extends Observable {
    public void updateName(String newName) {
        //標識狀態或者內容傳送改變
        setChanged();
        //通知所有觀察者
        notifyObservers(newName);
    }
}
		//使用步驟:
 		//建立被觀察者
        Beiguanchazhe beiguanchazhe =
new Beiguanchazhe(); //建立觀察者 Guanchazhe guanchazhe1 = new Guanchazhe("guan cha zhe 1"); Guanchazhe guanchazhe2 = new Guanchazhe("guan cha zhe 2"); Guanchazhe guanchazhe3 = new Guanchazhe("guan cha zhe 3"); //將觀察者註冊到可觀察的物件的觀察者列表中 beiguanchazhe.addObserver(guanchazhe1); beiguanchazhe.addObserver(guanchazhe2); beiguanchazhe.addObserver(guanchazhe3); //被觀察者更新的時候釋出訊息通知觀察者 beiguanchazhe.updateName("新的名字出現了");

執行結果:
guanchazhe

以上就是觀察者模式的簡單介紹啦。
關於android原始碼的觀察者模式分析的相關文章太多了,就不寫了(#^ . ^#)。