2 觀察者模式

2022-09-15 04:51:15 字數 2246 閱讀 1287

觀察者模式定義:定義了物件之間一對多的依賴,這樣一來,當乙個物件狀態發生變化時,它所有的依賴者都會收到通知並自動更新。

個人理解:主題發生變化時,把變化情況及時通知到訂閱了主題的各個觀察者(訂閱者)

觀察者模式設計方式讓主題 與 觀察者 之間實現了松耦合,能夠適應變化。

定義主題介面,提供主題必須實現三個方法:註冊、刪除、通知

public

inte***ce

subject

實現具體的天氣主題:

實現subject介面,實現註冊、刪除、通知方法;

定義觀察者集合用於觀察者註冊時使用;

定義更新天氣資料setmeasurements方法,該方法內預設呼叫measurementschanaged方法(呼叫notifyobservers,迴圈觀察者集合,呼叫每個觀察者的update更新方法)

public

class 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方法,用於被主題呼叫,實現通知功能

public

inte***ce

observer

定義觀察者顯示方法:

public

inte***ce

displayelement

以下三個觀察者實現了observer介面、displayelement 顯示介面:

在update方法中,預設呼叫display顯示方法;

在具體的觀察者中定義了個性化的顯示方式;

public

class 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)

}

測試類:

public

class

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...