原創(chuàng)文章,歡迎轉(zhuǎn)載冈闭。轉(zhuǎn)載請注明:關(guān)東升的博客
通知(Notification)機制是基于觀察者(Observer)模式也叫發(fā)布/訂閱(Publish/Subscribe)模式谈撒,是 MVC( 模型-視圖-控制器)模式的重要組成部分廊营。
問題提出
天氣一直是英
國人喜歡討論的話題哼凯,而最近幾年天氣的變化也成為中國人非常關(guān)注的話題锌妻。我會根據(jù)天氣預(yù)報決定是坐地鐵還是開車上班盈包,我的女兒也會根據(jù)天氣預(yù)報決定明天穿哪件衣服沸呐。于是我在移動公司為我的手機定制了天氣預(yù)報短信通知服務(wù),它的工作模型如圖所示呢燥。
每天氣象局將天氣預(yù)報信息投送給移動運營商崭添,移動運營商的短信中心負(fù)責(zé)把天氣預(yù)報發(fā)送給定制過這項服務(wù)的手機。
在軟件系統(tǒng)中叛氨,一個對象狀態(tài)改變也會連帶影響其他很多對象的狀態(tài)發(fā)生改變呼渣。能夠?qū)崿F(xiàn)這一需求的設(shè)計方案有很多,但能夠做到復(fù)用性強且對象之間匿名通信的寞埠,觀察者模式是其中最為適合的一個屁置。
解決方案
通知機制可以實現(xiàn)“一對多”的對象之間的通信。如圖所示仁连,在通知機制中對某個通知感興趣的所有對象都可以成為接收者蓝角。首先,這些對象需要向通知中心(NSNotificationCenter)發(fā)出addObserver消息進行注冊通知饭冬,在投送對象通過postNotificationName消息投送通知給通知中心使鹅,通知中心就會把通知廣播給注冊過的接收者。所有的接收者都不知道通知是誰投送的昌抠,更不關(guān)心它的細(xì)節(jié)患朱。投送對象與接收者是一對多的關(guān)系。接收者如果對通知不再關(guān)注炊苫,會給通知中心發(fā)出removeObserver消息注銷通知裁厅,以后不再接收通知。