觀察者模式定義:定義了物件之間一對多的依賴,這樣一來,當乙個物件狀態發生變化時,它所有的依賴者都會收到通知並自動更新。
個人理解:主題發生變化時,把變化情況及時通知到訂閱了主題的各個觀察者(訂閱者)
觀察者模式設計方式讓主題 與 觀察者 之間實現了松耦合,能夠適應變化。
定義主題介面,提供主題必須實現三個方法:註冊、刪除、通知
public
inte***ce
subject
實現具體的天氣主題:
實現subject介面,實現註冊、刪除、通知方法;
定義觀察者集合用於觀察者註冊時使用;
定義更新天氣資料setmeasurements方法,該方法內預設呼叫measurementschanaged方法(呼叫notifyobservers,迴圈觀察者集合,呼叫每個觀察者的update更新方法)
publicclass weatherdatasubject implements
subject
public
void
registerobserver(observer observer)
public
void
removeobserver(observer observer)
public
void
notifyobservers()
}public
void
measurementschanaged()
public
void setmeasurements(float temp, float humidity , float
pressure)
}
定義觀察者介面:
每個觀察者必須實現的update方法,用於被主題呼叫,實現通知功能
publicinte***ce
observer
定義觀察者顯示方法:
publicinte***ce
displayelement
以下三個觀察者實現了observer介面、displayelement 顯示介面:
在update方法中,預設呼叫display顯示方法;
在具體的觀察者中定義了個性化的顯示方式;
publicclass currentconditionsdisplay implements
observer,displayelement
@override
public
void update(float temp, float humidity, float
pressure)
}public
class statisticsdisplay implements
observer,displayelement
@override
public
void update(float temp, float humidity, float
pressure)
}public
class thirdpartydisplay implements
observer,displayelement
@override
public
void update(float temp, float humidity, float
pressure)
}
測試類:
publicclass
test
}
輸出結果:
currentconditionsdisplay:temp=1.0;humidity=1.0;pressure=1.0
statisticsdisplay:temp=1.0;humidity=1.0;pressure=1.0
thirdpartydisplay:temp=1.0;humidity=1.0;pressure=1.0
currentconditionsdisplay:temp=2.0;humidity=3.0;pressure=4.0
statisticsdisplay:temp=2.0;humidity=3.0;pressure=4.0
thirdpartydisplay:temp=2.0;humidity=3.0;pressure=4.0
設計模式 觀察者模式(2)
被觀察物件向觀察者推送主題的詳情資訊時候,不管觀察者是否需要,這些資訊一般是觀察目標物件的全部或者部分資訊。一般這種模型實現通過update object obj 將觀察目標物件傳入進去。被觀察物件通知觀察者時候,只傳送少量的資訊,如果需要詳情資訊時候,被觀察物件也就是觀察目標物件主動到觀察者當中,...
設計模式 觀察者模式2
觀察者模式 一.概念 傳統理解 觀察者模式 有時又被稱為發布 publish 觀察者模式 observer 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的...
python觀察者模式 python 觀察者模式
python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...