觀察者模式定義
又叫做發(fā)布-訂閱模式,定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象,同時(shí)監(jiān)聽一個(gè)主題對(duì)象,這個(gè)主題對(duì)象在狀態(tài)發(fā)生變化時(shí),會(huì)通知所有的觀察者對(duì)象,是它們能夠自動(dòng)更新自己
將一個(gè)系統(tǒng)分割成一系列相互協(xié)作的類, 需要維護(hù)相關(guān)對(duì)象間的一致性, 為了維持一致性而使各類緊密耦合,這樣會(huì)給維護(hù),擴(kuò)展和重用都帶來(lái)不便
生活中例子:
上班期間,A員工在玩游戲,B員工在看新聞,前臺(tái)通知他們老板來(lái)了, A和B開始工作,沒(méi)有被老板抓到
模式結(jié)構(gòu)圖:
Subject: 抽象通知者, 把所有觀察者對(duì)象的引用保存在一個(gè)聚焦里,定義增加,刪除和通知方法
Observer:抽象觀察者,定義更新方法
ConcreteSubject: 具體通知者,將有關(guān)狀態(tài)存入具體觀察者對(duì)象,在狀態(tài)改變時(shí),給所有觀察者發(fā)出通知
ConcreteObserver:具體觀察者,保存一個(gè)具體通知者對(duì)象的引用, 以便使本身的狀態(tài)與主題的狀態(tài)相協(xié)調(diào)
特點(diǎn)及使用場(chǎng)景
優(yōu)點(diǎn):解除了通知者和具體觀察者的耦合,讓耦合的雙方依賴于抽象,使得各自的變換不會(huì)影響到另一方
缺點(diǎn):抽象通知者依然依賴于抽象觀察者,并未完全解除耦合
使用場(chǎng)景:當(dāng)一個(gè)對(duì)象的改變,需要同時(shí)改變其他對(duì)象的時(shí)候,而且它不知道具體有多少對(duì)象需要改變