Observer 觀察者 , Observable 被觀察者,這東西跟BroadcastReceiver有幾分相似。
簡單的說,當Observable(被觀察者)發生變化的時候,會通知Observer(觀察者)。
以生活例子來說,你追蹤了其中一個粉絲頁面,你就是觀察者,而粉絲頁面是被觀察者,
當粉絲頁(被觀察者)新增了文章,也就是發生變化時,會通知你(觀察者)。
大概知道概念後,就可以來試著實作出來了。
首先先新增一個Singleton Class,名字隨便取一個。
然後這個Class要繼承Observable,此時你的程式碼應該會像下面這樣。
這裡使用Singleton,是為了確保只有一個實體,如果有多個實體會變得很怪,
以剛才生活例子來講,你追隨很多個同一個粉絲團(?,聽起來就不太對。
接著我們加入一些簡短的程式碼,有一個屬性可以讓其他人設定,當值改變的時候做一些事情。
有兩個比較重要的重點,setChanged,notifyObservers,這兩個方法是因為你繼承了Observable後可以使用的方法。
setChanged,簡單的說就是產生變化,上面有提到,當被觀察者產生變化時,要通知觀察者,當你呼叫這個方法的時候,就是產生變化了。
notifyObservers,通知觀察者。
你可能會想,我直接用notifyObservers通知觀察者就好了,為啥還要多設定一個產生變化,此時我們可以來看一下觀察者的程式碼該如何實現。
我們先在MainActivity之中implements Observer。
此時它會要我們實作一個方法,按下確定即可。
這麼一來我們多了一個方法,update,也就是更新,當被觀察者產生變化時,會在這邊收到訊息,因此上面必須先setChanged,這邊才會收到訊息。
接著我們試著把觀察這個被觀察者吧。
先透過addObserver來加入觀察者,代表這個被觀察者多了一個觀察者,
然後試著輸入了三個值,根據判斷,當值改變的時候會呼叫setChanged,
最後看看update是否印出與想像中相同的Log。
事實上它會印出兩次Log,因為setChanged只被呼叫了兩次。
如此一來你應該對觀察者與被觀察者有基本的認識了。
沒有留言:
張貼留言