首先來(lái)看看觀(guān)察者模式的概念:
定義對(duì)象間的一種一對(duì)多的依賴(lài)關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)送改變時(shí),所有依賴(lài)于它的對(duì)象都能得到通知并被自動(dòng)更新
第一句可能不太懂,但是后面的容易懂,就像天氣預(yù)報(bào)一樣,只要你訂閱了,他就會(huì)發(fā)短信更新通知你說(shuō)天氣變化了。這就是觀(guān)察者。
觀(guān)察者模式的成員:
1)、觀(guān)察者。我們稱(chēng)之為Observer, 有時(shí)候我們也成他為訂閱者,即Subscriber.
2)、被觀(guān)察者:我們稱(chēng)之為Observable,即可用被觀(guān)察的東西,有時(shí)候會(huì)成為主題,Subject
三部曲:
1、創(chuàng)建被觀(guān)察者:注冊(cè)(訂閱),注銷(xiāo)(取消訂閱), 更新數(shù)據(jù)(Observable)
2、觀(guān)察者:即Observer也叫Subscriber,在rxjava中Subscriber只是比Observer多了幾個(gè)方法相對(duì)功能強(qiáng)大點(diǎn)
3、訂閱、
二、在Android中的觀(guān)察者:
1)、最簡(jiǎn)單的按鈕點(diǎn)擊事件(Button)
Button btn = new Button(this);
btn.setOnClickListener(new View.OnClickListener()){
? ? ? public void onClick(View v){?
? ? ? ? ? ?Log.e("Tag", "click");
? ? ? }
}
2)、RecycleView中的addOnScrollListener方法:滾動(dòng)監(jiān)聽(tīng)
3)、Android中自帶的廣播,廣播通過(guò)registerReceiver注冊(cè)廣播,通過(guò)unregisterReceiver注銷(xiāo)廣播,通過(guò)sendBroadcast發(fā)送廣播。這就是典型的觀(guān)察者模式,
4)、開(kāi)源框架EventBus也是基于觀(guān)察者模式,觀(guān)察者模式的三個(gè)典型,注冊(cè)、取消注冊(cè),發(fā)送事件。
6)、當(dāng)然最重量級(jí)的還是現(xiàn)在火熱的RXjava,這個(gè)也是基于觀(guān)察者模式。
①、創(chuàng)建被觀(guān)察者:
②、觀(guān)察者、即訂閱者
③、觀(guān)察者進(jìn)行事件的訂閱(被觀(guān)察者訂閱觀(guān)察者)
具體的RXjava詳解請(qǐng)查看這里Rxjava詳細(xì)解析
支持原文創(chuàng)作:觀(guān)察者模式