java常用設計模式4——觀察者模式
阿新 • • 發佈:2018-12-04
當被觀察者的狀態傳送改變的時候,所有觀察它的物件都會得到通知並自動更新。
觀察者模式UML圖:
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("新的名字出現了");
執行結果:
以上就是觀察者模式的簡單介紹啦。
關於android原始碼的觀察者模式分析的相關文章太多了,就不寫了(#^ . ^#)。