定義:對(duì)象間的一種一對(duì)多的依賴關(guān)系,使得當(dāng)每一個(gè)對(duì)象改變狀態(tài),則所有依賴于他的對(duì)象都會(huì)得到通知,并自動(dòng)更新。
觀察者模式設(shè)計(jì)要點(diǎn)
交互對(duì)象之間松耦合
1)觀察者定義了對(duì)象之間一對(duì)多的關(guān)系
2)被觀察者用一個(gè)共同的接口來更新觀察者
3)觀察者和被觀察者用松耦合方式結(jié)合,被觀察者不知道觀察者的細(xì)節(jié),只知道觀察者實(shí)現(xiàn)了觀察者接口
觀察者模式的優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn):
1)觀察者與被觀察者抽象耦合,容易擴(kuò)展;
2)建立了一套觸發(fā)機(jī)制。
缺點(diǎn):
1)循環(huán)依賴會(huì)導(dǎo)致系統(tǒng)崩潰;
2)觀察者太多會(huì)浪費(fèi)時(shí)間。
觀察者模式解決的問題
1)定義對(duì)象之間的一對(duì)多依賴關(guān)系而不使對(duì)象緊密耦合。
2)確保當(dāng)一個(gè)對(duì)象改變狀態(tài)時(shí),自動(dòng)更新開放數(shù)量的從屬對(duì)象。
3)一個(gè)對(duì)象應(yīng)該可以通知開放式數(shù)量的其他對(duì)象。
觀察者模式的UML圖

觀察者模式uml圖

搶票監(jiān)聽

時(shí)序圖
參考文獻(xiàn)
觀察者模式 vs 發(fā)布-訂閱模式
觀察者模式(Observer)
如何使用 Java8 實(shí)現(xiàn)觀察者模式?(上)
如何使用 Java8 實(shí)現(xiàn)觀察者模式?(下)