要多想,理解後閉上眼睛,想象下生活中哪些場景用到,進而回顧平時**生涯中哪些場景可以用該模式去實現。
有時被稱作發布/訂閱模式、模型-檢視模式,它是物件行為型模式。觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。
主題對應觀察者主要有兩大類和四小類
兩大類:主題、觀察者
四小類:抽象主題,具體主題,抽象觀察者,具體觀察者
具體主題注入所有觀察者,主題變動通知觀察者,註冊觀察者,取消觀察者
具體觀察者注入主題,然後呼叫主題註冊方法把自己註冊進主題
首先定義乙個觀察者陣列,並實現增、刪及通知操作。它的職責很簡單,就是定義誰能觀察,誰不能觀察,用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 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...