一.什么是觀察者模式?
簡(jiǎn)單的說(shuō)就是一個(gè)對(duì)象擁有多個(gè)特征,當(dāng)某一個(gè)特征發(fā)生變化時(shí),另外一個(gè)對(duì)象做出相應(yīng)的處理和操作.后者觀察前者的一舉一動(dòng),并及時(shí)對(duì)一些變化做出響應(yīng)
二.為什么要使用觀察者模式?
觀察者模式(Observer)完美的將觀察者和被觀察的對(duì)象分離開(kāi)讼育。舉個(gè)例子揍愁,用戶界面可以作為一個(gè)觀察者无畔,業(yè)務(wù)數(shù)據(jù)是被觀察者,用戶界面觀察業(yè)務(wù)數(shù)據(jù)的變化,發(fā)現(xiàn)數(shù)據(jù)變化后,就顯示在界面上。面向?qū)ο笤O(shè)計(jì)的一個(gè)原則是:系統(tǒng)中的每個(gè)類將重點(diǎn)放在某一個(gè)功能上,而不是其他方面奕删。一個(gè)對(duì)象只做一件事情,并且將他做好疗认。觀察者模式在模塊之間劃定了清晰的界限急侥,提高了應(yīng)用程序的可維護(hù)性和重用性。
觀察者設(shè)計(jì)模式定義了對(duì)象間的一種一對(duì)多的依賴關(guān)系侮邀,以便一個(gè)對(duì)象的狀態(tài)發(fā)生變化時(shí)坏怪,所有依賴于它的對(duì)象都得到通知并自動(dòng)刷新。
三.怎么使用觀察者模式?
這里我主要介紹下KVO的實(shí)現(xiàn):
KVO實(shí)現(xiàn)方式一:
觀察的是普通屬性
打印結(jié)果:
KVO實(shí)現(xiàn)方式二:
觀察的是數(shù)組集合類數(shù)組元素和個(gè)數(shù)的變化
這里的關(guān)鍵一步:
這一操作和普通我使用的不一樣,原理在于KVO監(jiān)聽(tīng)的是一個(gè)屬性的指針變化,如果監(jiān)聽(tīng)屬性是一個(gè)普通屬性的話,那么改變這個(gè)屬性,就意味著對(duì)應(yīng)的指針發(fā)生了變化,因此可以做到監(jiān)聽(tīng),但是數(shù)組就有點(diǎn)不一樣了, 因?yàn)閿?shù)組內(nèi)部元素發(fā)送變化,但是數(shù)組對(duì)應(yīng)的指針沒(méi)有變化,這就導(dǎo)致為什么使用普通的添加方法KVO監(jiān)聽(tīng)不到變化
這一步的操作就是重新生成一個(gè)新的數(shù)組,給numAry,這樣指針就發(fā)生了變化,并做相應(yīng)的操作,這樣KVO就可以監(jiān)聽(tīng)到數(shù)組的變化
KVO實(shí)現(xiàn)方式三:
觀察的是數(shù)組中某一個(gè)元素的屬性的變化
其他 的集合類也可以做類似的監(jiān)聽(tīng),大家可以研究研究
菜鳥教程:http://www.runoob.com/design-pattern/observer-pattern.html
百度百科:https://baike.baidu.com/item/觀察者模式/5881786?fr=aladdin
享元模式:http://www.reibang.com/p/f9c53b9825e4
工廠模式:http://www.reibang.com/p/6f3ffb1397f7
責(zé)任鏈模式:http://www.reibang.com/p/30475126694a