iOS 觀察者模式

一.什么是觀察者模式?

簡單的說就是一個對象擁有多個特征,當某一個特征發(fā)生變化時,另外一個對象做出相應的處理和操作.后者觀察前者的一舉一動,并及時對一些變化做出響應

觀察者模式.png

二.為什么要使用觀察者模式?

觀察者模式(Observer)完美的將觀察者和被觀察的對象分離開。舉個例子,用戶界面可以作為一個觀察者,業(yè)務數(shù)據(jù)是被觀察者,用戶界面觀察業(yè)務數(shù)據(jù)的變化,發(fā)現(xiàn)數(shù)據(jù)變化后,就顯示在界面上。面向?qū)ο笤O計的一個原則是:系統(tǒng)中的每個類將重點放在某一個功能上,而不是其他方面。一個對象只做一件事情,并且將他做好。觀察者模式在模塊之間劃定了清晰的界限,提高了應用程序的可維護性和重用性。
觀察者設計模式定義了對象間的一種一對多的依賴關系,以便一個對象的狀態(tài)發(fā)生變化時,所有依賴于它的對象都得到通知并自動刷新。

三.怎么使用觀察者模式?

這里我主要介紹下KVO的實現(xiàn):

KVO實現(xiàn)方式一:

觀察的是普通屬性

觀察的是普通屬性.png

打印結果:

打印結果.png

KVO實現(xiàn)方式二:

觀察的是數(shù)組集合類數(shù)組元素和個數(shù)的變化

觀察的是數(shù)組集合類數(shù)組元素和個數(shù)的變化.png

這里的關鍵一步:

關鍵.png

這一操作和普通我使用的不一樣,原理在于KVO監(jiān)聽的是一個屬性的指針變化,如果監(jiān)聽屬性是一個普通屬性的話,那么改變這個屬性,就意味著對應的指針發(fā)生了變化,因此可以做到監(jiān)聽,但是數(shù)組就有點不一樣了, 因為數(shù)組內(nèi)部元素發(fā)送變化,但是數(shù)組對應的指針沒有變化,這就導致為什么使用普通的添加方法KVO監(jiān)聽不到變化

關鍵.png

這一步的操作就是重新生成一個新的數(shù)組,給numAry,這樣指針就發(fā)生了變化,并做相應的操作,這樣KVO就可以監(jiān)聽到數(shù)組的變化

KVO實現(xiàn)方式三:

觀察的是數(shù)組中某一個元素的屬性的變化

觀察的是數(shù)組中某一個元素的屬性的變化.png

其他 的集合類也可以做類似的監(jiān)聽,大家可以研究研究

菜鳥教程:http://www.runoob.com/design-pattern/observer-pattern.html
百度百科:https://baike.baidu.com/item/觀察者模式/5881786?fr=aladdin

享元模式:http://www.lxweimin.com/p/f9c53b9825e4
工廠模式:http://www.lxweimin.com/p/6f3ffb1397f7
責任鏈模式:http://www.lxweimin.com/p/30475126694a

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 觀察者模式本質(zhì)上時一種發(fā)布-訂閱模型,用以消除具有不同行為的對象之間的耦合,通過這一模式,不同對象可以協(xié)同工作,同...
    PlatonsDream閱讀 1,317評論 0 0
  • 什么是觀察者模式?當A對B的變化感興趣,需要監(jiān)聽B的狀態(tài)變化,就注冊為B的觀察者,當B發(fā)生變化時通知A,告知B發(fā)生...
    _Lily閱讀 1,612評論 2 4
  • KVO即:Key-Value Observing, 直譯為:基于鍵值的觀察者。 它提供一種機制,當指定的對象的屬性...
    _Lily閱讀 1,017評論 0 1
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,212評論 30 472
  • //聯(lián)系人:石虎QQ:1224614774昵稱:嗡嘛呢叭咪哄 一、觀察者模式優(yōu)點: 1.觀察者模式在被觀察者和觀察...
    石虎132閱讀 3,288評論 0 4