2015年6月30日 星期二

[Android] Observer與Observable的基本用法

Observer 觀察者 , Observable 被觀察者,這東西跟BroadcastReceiver有幾分相似。

簡單的說,當Observable(被觀察者)發生變化的時候,會通知Observer(觀察者)。

以生活例子來說,你追蹤了其中一個粉絲頁面,你就是觀察者,而粉絲頁面是被觀察者,

當粉絲頁(被觀察者)新增了文章,也就是發生變化時,會通知你(觀察者)。

大概知道概念後,就可以來試著實作出來了。

首先先新增一個Singleton Class,名字隨便取一個。












然後這個Class要繼承Observable,此時你的程式碼應該會像下面這樣。

這裡使用Singleton,是為了確保只有一個實體,如果有多個實體會變得很怪,

以剛才生活例子來講,你追隨很多個同一個粉絲團(?,聽起來就不太對。

接著我們加入一些簡短的程式碼,有一個屬性可以讓其他人設定,當值改變的時候做一些事情。

有兩個比較重要的重點,setChangednotifyObservers這兩個方法是因為你繼承了Observable後可以使用的方法。

setChanged,簡單的說就是產生變化,上面有提到,當被觀察者產生變化時,要通知觀察者,當你呼叫這個方法的時候,就是產生變化了。

notifyObservers,通知觀察者。

你可能會想,我直接用notifyObservers通知觀察者就好了,為啥還要多設定一個產生變化,此時我們可以來看一下觀察者的程式碼該如何實現。

我們先在MainActivity之中implements Observer。

此時它會要我們實作一個方法,按下確定即可。












這麼一來我們多了一個方法,update,也就是更新,當被觀察者產生變化時,會在這邊收到訊息,因此上面必須先setChanged,這邊才會收到訊息。

接著我們試著把觀察這個被觀察者吧。

先透過addObserver來加入觀察者,代表這個被觀察者多了一個觀察者,

然後試著輸入了三個值,根據判斷,當值改變的時候會呼叫setChanged,

最後看看update是否印出與想像中相同的Log。

事實上它會印出兩次Log,因為setChanged只被呼叫了兩次。

如此一來你應該對觀察者與被觀察者有基本的認識了。

沒有留言:

張貼留言