在設計模式中,觀察者是使用率非常高的設計模式之一,特別是在android中,一些訂閱,RxJAVA...等等,都用到了設計者模式,因為觀察者模式使得我們的UI層和具體的業(yè)務邏輯分開,解耦。
觀察者模式的定義:
定義對象之間的一種一對多的關系,使得每當一個對象改變狀態(tài),則所有的依賴于它的對象都會得到通知并被自動更新。
從定義中可以知道,這是一個一對多的關系,一個對象對多個對象,所以是一個類中有多個類的引用,這個對象狀態(tài)改變,所有依賴它的對象都會得到通知并改變,所以這個類應該有一個通知的方法,依賴它的對象應該都有一個改變的方法。
接下來簡單實現(xiàn)這個類的設計
這個就是我們的被觀察者的類的設計,它有一個被觀察的數(shù)據(jù),這個數(shù)據(jù)如果改變,就會通知觀察者對象,所以當調用setMoney()方法時,在其內(nèi)部調用了notifalAll()方法,來通知觀察者,在notifalAll()方法中我們循環(huán)取出arraylist中的觀察者對象,并調用觀察者對象的updata()方法來更新我們的觀察者對象,register()方法表示注冊觀察者,就是將觀察者對象添加到集合中,unRegister()方法自然就是移除觀察者對象。
接下來就是我們的觀察者對象的設計,從上面可以看出來我們的觀察者有一個更新自己的方法updata(),并且他們的父類是同一個,方便添加的集合中。
這上面就是觀察者的父類
這兩個就是具體的觀察者類
這是它的測試類,上面的注釋都寫的很清楚了,就不需要解釋什么了
這個就是測試的結果了,從結果來看,當我們的money值發(fā)生變化時,就會通知我們的觀察者來執(zhí)行相應的邏輯。
這就是觀察者模式。在遇到一些復雜的需求時,我們可以多考慮考慮設計模式,來讓復雜的問題簡單化,化繁為簡。