一.什么是觀察者模式?
簡單的說就是一個對象擁有多個特征,當某一個特征發(fā)生變化時,另外一個對象做出相應的處理和操作.后者觀察前者的一舉一動,并及時對一些變化做出響應
二.為什么要使用觀察者模式?
觀察者模式(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)方式一:
觀察的是普通屬性
打印結果:
KVO實現(xiàn)方式二:
觀察的是數(shù)組集合類數(shù)組元素和個數(shù)的變化
這里的關鍵一步:
這一操作和普通我使用的不一樣,原理在于KVO監(jiān)聽的是一個屬性的指針變化,如果監(jiān)聽屬性是一個普通屬性的話,那么改變這個屬性,就意味著對應的指針發(fā)生了變化,因此可以做到監(jiān)聽,但是數(shù)組就有點不一樣了, 因為數(shù)組內(nèi)部元素發(fā)送變化,但是數(shù)組對應的指針沒有變化,這就導致為什么使用普通的添加方法KVO監(jiān)聽不到變化
這一步的操作就是重新生成一個新的數(shù)組,給numAry,這樣指針就發(fā)生了變化,并做相應的操作,這樣KVO就可以監(jiān)聽到數(shù)組的變化
KVO實現(xiàn)方式三:
觀察的是數(shù)組中某一個元素的屬性的變化
其他 的集合類也可以做類似的監(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