觀(guān)察者設(shè)計(jì)模式

首先來(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)

以上是被觀(guān)察者

2、觀(guān)察者:即Observer也叫Subscriber,在rxjava中Subscriber只是比Observer多了幾個(gè)方法相對(duì)功能強(qiáng)大點(diǎn)

觀(guā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ā)送事件。

EventBus

6)、當(dāng)然最重量級(jí)的還是現(xiàn)在火熱的RXjava,這個(gè)也是基于觀(guān)察者模式。

①、創(chuàng)建被觀(guān)察者:

被觀(guān)察者

②、觀(guān)察者、即訂閱者

訂閱者

③、觀(guān)察者進(jìn)行事件的訂閱(被觀(guān)察者訂閱觀(guān)察者)

訂閱操作

具體的RXjava詳解請(qǐng)查看這里Rxjava詳細(xì)解析

支持原文創(chuàng)作:觀(guān)察者模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容