設(shè)計模式:觀察者模式

什么是觀察者模式
觀察者模式(Observer Pattern),也叫做發(fā)布/訂閱模型(Publish/Subscribe)。在此種模式中,一個目標(biāo)物件管理所有相依于它的觀察者物件,并且在它本身的狀態(tài)改變時主動發(fā)出通知。這通常透過呼叫各觀察者所提供的方法來實(shí)現(xiàn)。此種模式通常被用在即時事件處理系統(tǒng)。
一句話歸納
解耦觀察者與被觀察者
示例
在我很小的時候,我看過很多動畫片,比如“藍(lán)貓?zhí)詺馊枴薄ⅰ吧颀埗肥俊?、“迪迦奧特曼”等等,但有一部動畫片雖然全程文字少的可憐,但還是讓我的童年充滿樂趣,它叫做“貓和老鼠”,我記得有一個故事講的是某一個夜晚,湯姆找杰瑞玩游戲,但杰瑞想盡辦法叫醒湯姆的主人,主人醒了打了湯姆一頓,很搞笑~
在這個故事中,湯姆是被觀察者,而杰瑞和主人是觀察者,代碼如下:

適用性
以下場景我建議你考慮使用
一個對象的改變將導(dǎo)致其他一個或多個對象也發(fā)生改變,而不知道具體有多少對象將發(fā)生改變,可以降低對象之間的耦合度。
實(shí)現(xiàn)類似廣播機(jī)制的功能,不需要知道具體收聽者,只需分發(fā)廣播,系統(tǒng)中感興趣的對象會自動接收該廣播。
需要在系統(tǒng)中創(chuàng)建一個觸發(fā)鏈,可以使用觀察者模式創(chuàng)建一種鏈?zhǔn)接|發(fā)機(jī)制
局限性
以下場景我建議你謹(jǐn)慎使用
目標(biāo)與觀察者之間的依賴關(guān)系并沒有完全解除,而且有可能出現(xiàn)循環(huán)引用。
當(dāng)觀察者對象很多時,通知的發(fā)布會花費(fèi)很多時間,影響程序的效率。
END
好兄弟可以點(diǎn)贊并關(guān)注我的公眾號“javaAnswer”,全部都是干貨。
