觀察者模式:有時(shí)被稱作發(fā)布/訂閱模式,觀察者模式定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽某一個(gè)主題對(duì)象。這個(gè)主題對(duì)象在狀態(tài)發(fā)生變化時(shí)混卵,會(huì)通知所有觀察者對(duì)象,使它們能夠自動(dòng)更新自己窖张。將一個(gè)系統(tǒng)分割成一個(gè)一些類相互協(xié)作的類有一個(gè)不好的副作用幕随,那就是需要維護(hù)相關(guān)對(duì)象間的一致性。我們不希望為了維持一致性而使各類緊密耦合宿接,這樣會(huì)給維護(hù)合陵、擴(kuò)展和重用都帶來不便。觀察者就是解決這類的耦合關(guān)系的澄阳。
1 抽象主題(Subject):它把所有觀察者對(duì)象的引用保存到一個(gè)聚集里拥知,每個(gè)主題都可以有任何數(shù)量的觀察者。抽象主題提供一個(gè)接口碎赢,可以增加和刪除觀察者對(duì)象低剔。
2 抽象觀察者(Observer):為所有的具體觀察者定義一個(gè)接口,在得到主題通知時(shí)更新自己肮塞。
3 具體主題(ConcreteSubject):將有關(guān)狀態(tài)存入具體觀察者對(duì)象襟齿;在具體主題內(nèi)部狀態(tài)改變時(shí),給所有登記過的觀察者發(fā)出通知枕赵。
4 具體觀察者(ConcreteObserver):實(shí)現(xiàn)抽象觀察者角色所要求的更新接口猜欺,以便使本身的狀態(tài)與主題狀態(tài)協(xié)調(diào)。
優(yōu)點(diǎn):觀察者模式解除了主題和具體觀察者的耦合拷窜,讓耦合的雙方都依賴于抽象开皿,而不是依賴具體。從而使得各自的變化都不會(huì)影響另一邊的變化篮昧。
缺點(diǎn):依賴關(guān)系并未完全解除赋荆,抽象通知者依舊依賴抽象的觀察者。
適用場(chǎng)景:1.當(dāng)一個(gè)對(duì)象的改變需要給變其它對(duì)象時(shí)懊昨,而且它不知道具體有多少個(gè)對(duì)象有待改變時(shí)窄潭。
2.一個(gè)抽象某型有兩個(gè)方面,當(dāng)其中一個(gè)方面依賴于另一個(gè)方面酵颁,這時(shí)用觀察者模式可以將這兩者封裝在獨(dú)立的對(duì)象中使它們各自獨(dú)立地改變和復(fù)用嫉你。