觀察者模式深入理解

2021-10-06 03:07:44 字數 3196 閱讀 5106

要多想,理解後閉上眼睛,想象下生活中哪些場景用到,進而回顧平時**生涯中哪些場景可以用該模式去實現。

有時被稱作發布/訂閱模式、模型-檢視模式,它是物件行為型模式。觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。

主題對應觀察者主要有兩大類和四小類

兩大類:主題、觀察者

四小類:抽象主題,具體主題,抽象觀察者,具體觀察者

具體主題注入所有觀察者,主題變動通知觀察者,註冊觀察者,取消觀察者

具體觀察者注入主題,然後呼叫主題註冊方法把自己註冊進主題

首先定義乙個觀察者陣列,並實現增、刪及通知操作。它的職責很簡單,就是定義誰能觀察,誰不能觀察,用vector是執行緒同步的,比較安全,也可以使用arraylist,是執行緒非同步的,但不安全。

public class subject
繼承subject類,在這裡實現具體業務,在具體專案中,該類會有很多變種。

public inte***ce observer
繼承subject類,在這裡實現具體業務,在具體專案中,該類會有很多變種。

public class concretesubject extends subject

//刪除乙個觀察者

public void deleteobserver(observer observer)

//通知所有觀察者

public void notifyobserver()

}

## 4. 具體觀察者

```c

public class concreteobserver implements observer

}

首先建立乙個被觀察者,然後定義乙個觀察者,將該被觀察者新增到該觀察者的觀察者陣列中,進行測試。

public class client 

}

閉上眼睛想象一下生活中有哪些類似的場景,能想多少想多少

手機丟了,委託別人給其他人發訊息通知

通知老師/老闆來了

拍賣,拍賣師觀察最高標價,然後通知給其它競價者競價

在乙個目錄下建立乙個檔案,會同時通知目錄管理器增加目錄,並通知磁碟減少空間,檔案是被觀察者,目錄管理器和磁碟管理器是觀察者

貓叫了一聲,嚇著了老鼠,也驚到了主人,貓是被觀察者,老鼠和人是觀察者

疫情期間:乙個人從疫區過來,則這個人是被觀察的物件,當體溫超過37度,保安拒絕出入公共場所、社群進行登記、醫院找拉去隔離**、健康碼由綠碼顯示為紅碼

**結構

/**

* 從疫區回來的人

*/public class epidemicareaperson

public void

settemperature

(int temperature)

public string getname()

public void

setname

(string name)

}

2、測體溫事件抽象

/**

* 測體溫事件抽象

*/public inte***ce thermometerevent

3、測體溫事件具體實現

public class thermometereventimpl implements thermometerevent 

@override

public void

removeobserver

(observer observer)

@override

public void

notifyobserver

(epidemicareaperson epidemicareaperson)

}else

}}

4、觀察者抽象

/**

* 觀察者

*/public inte***ce observer

5、具體觀察者-醫生

public class doctorobserver implements observer 

}

6、具體觀察者-保安

public class baoanobserver implements observer 

}

7、模擬事件過程

//乙個超過37度的人

epidemicareaperson epidemicareaperson = new epidemicareaperson()

; epidemicareaperson.

setname

("xiaohong");

epidemicareaperson.

settemperature(38

);//建立乙個主題

thermometerevent subject = new thermometereventimpl()

;//定義乙個觀察者

observer observer = new doctorobserver()

; observer baoanobserver = new baoanobserver()

;//觀察

subject.

registerobserver

(observer)

; subject.

registerobserver

(baoanobserver)

;//開始活動

subject.

notifyobserver

(epidemicareaperson)

;

後面還可以加這樣的場景,醫生觀察者再作為主題,如果該疑似測核酸顯示陽性,則上報國家統計,通報**,通知疑似者家人。

理解設計模式(觀察者)

觀察者模式,保證主題和若干觀察者之間的一致性。有時又被稱為發布 訂閱subscribe 模式 模型 檢視view 模式 源 收聽者listener 模式或從屬者模式 此種模式通常被用來實現事件處理系統 乙個系統,由乙個物件和若干協作物件組成,同時要避免這些物件之間相互耦合 一般由介面或抽象類實現 註...

python觀察者模式 python 觀察者模式

python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...

觀察者模式

觀察者模式 observer 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...