![【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android中怎么實(shí)現(xiàn)觀察者模式_第1頁(yè)](http://file4.renrendoc.com/view/dc7f31a106ca061f4722338f883d9a07/dc7f31a106ca061f4722338f883d9a071.gif)
![【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android中怎么實(shí)現(xiàn)觀察者模式_第2頁(yè)](http://file4.renrendoc.com/view/dc7f31a106ca061f4722338f883d9a07/dc7f31a106ca061f4722338f883d9a072.gif)
![【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android中怎么實(shí)現(xiàn)觀察者模式_第3頁(yè)](http://file4.renrendoc.com/view/dc7f31a106ca061f4722338f883d9a07/dc7f31a106ca061f4722338f883d9a073.gif)
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android中怎么實(shí)現(xiàn)觀察者模式
Android中怎么實(shí)現(xiàn)觀察者模式,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面在下將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。1.意圖定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并被自動(dòng)更新。熱門詞匯:依賴
發(fā)布-訂閱事件通知更新監(jiān)聽(tīng)2.結(jié)構(gòu)這是一個(gè)最簡(jiǎn)單的觀察者模式,目標(biāo)對(duì)象能夠添加和刪除觀察者,當(dāng)自己某種狀態(tài)或者行為發(fā)生改變時(shí),可通過(guò)notify通知注冊(cè)的觀察者進(jìn)行更新操作。分析AbstractCursor的具體情況,我們發(fā)現(xiàn)實(shí)際工作有時(shí)需要對(duì)觀察者進(jìn)行統(tǒng)一管理,甚至觀察者類型有很多種而又可以分成幾個(gè)系列,這個(gè)時(shí)候是要復(fù)雜的多,通過(guò)合理的分層這個(gè)問(wèn)題很好解決。下面根據(jù)具體情況,我們畫(huà)出android中abstractCurosr中用到的觀察者模式結(jié)構(gòu)圖:觀察者分成了兩個(gè)系列。3.代碼列舉其中相關(guān)核心代碼如下:public
abstract
class
AbstractCursor
{
//定義管理器
DataSetObservable
mDataSetObservable
=
new
DataSetObservable();
ContentObservable
mContentObservable
=
new
ContentObservable();
//注冊(cè)和卸載兩類觀察者
public
void
registerContentObserver(ContentObserver
observer)
{
mContentObservable.registerObserver(observer);
}
public
void
unregisterContentObserver(ContentObserver
observer)
{
//
cursor
will
unregister
all
observers
when
it
close
if
(!mClosed)
{
mContentObservable.unregisterObserver(observer);
}
}
public
void
registerDataSetObserver(DataSetObserver
observer)
{
mDataSetObservable.registerObserver(observer);
}
public
void
unregisterDataSetObserver(DataSetObserver
observer)
{
mDataSetObservable.unregisterObserver(observer);
}
//2類通知方法
protected
void
onChange(boolean
selfChange)
{
synchronized
(mSelfObserverLock)
{
mContentObservable.dispatchChange(selfChange);
if
(mNotifyUri
!=
null
&&
selfChange)
{
mContentResolver.notifyChange(mNotifyUri,
mSelfObserver);
}
}
}
protected
void
notifyDataSetChange()
{
mDataSetObservable.notifyChanged();
}
}再看看Observable<T>類和DataSetObservable類:public
abstract
class
Observable<T>
{
/**
*
觀察者列表
*/
protected
final
ArrayList<T>
mObservers
=
new
ArrayList<T>();
public
void
registerObserver(T
observer)
{
if
(observer
==
null)
{
throw
new
IllegalArgumentException("The
observer
is
null.");
}
synchronized(mObservers)
{
if
(mObservers.contains(observer))
{
throw
new
IllegalStateException("Observer
"
+
observer
+
"
is
already
registered.");
}
mObservers.add(observer);
}
}
public
void
unregisterObserver(T
observer)
{
if
(observer
==
null)
{
throw
new
IllegalArgumentException("The
observer
is
null.");
}
synchronized(mObservers)
{
int
index
=
mObservers.indexOf(observer);
if
(index
==
-1)
{
throw
new
IllegalStateException("Observer
"
+
observer
+
"
was
not
registered.");
}
mObservers.remove(index);
}
}
public
void
unregisterAll()
{
synchronized(mObservers)
{
mObservers.clear();
}
}
}和public
class
DataSetObservable
extends
Observable<DataSetObserver>
{
/**
*
數(shù)據(jù)發(fā)生變化時(shí),通知所有的觀察者
*/
public
void
notifyChanged()
{
synchronized(mObservers)
{
for
(DataSetObserver
observer
:
mObservers)
{
observer.onChanged();
}
}
}
//...
...
(其他方法)
}觀察者DataSetObserver類是一個(gè)抽象類:public
abstract
class
DataSetObserver
{
public
void
onChanged()
{
//
Do
nothing
}
}所以我們具體看它的子類:public
class
AlphabetIndexer
extends
DataSetObserver{
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年出納員勞動(dòng)合同
- 2025年個(gè)人借貸連帶保證合同范文
- 2025年度醫(yī)療建筑空調(diào)設(shè)備更換合同
- 2025年度醫(yī)療設(shè)備安裝與培訓(xùn)服務(wù)合同范本
- 2025年度廣告牌材質(zhì)研發(fā)與應(yīng)用采購(gòu)合同
- 2025年度特色餐飲門面租賃管理合同
- 2025年度數(shù)據(jù)中心UPS電源安裝與維護(hù)服務(wù)合同
- 2025年度會(huì)議室租賃及會(huì)議場(chǎng)地設(shè)施更新改造合同
- 2025年度城市綠化苗木種植養(yǎng)護(hù)合同二零二五年度規(guī)范
- 2025年度合同環(huán)境法律風(fēng)險(xiǎn)評(píng)估與合規(guī)服務(wù)協(xié)議
- 2025年度廚師職業(yè)培訓(xùn)學(xué)院合作辦學(xué)合同4篇
- GB/T 19228.1-2024不銹鋼卡壓式管件組件第1部分:卡壓式管件
- 2024年計(jì)算機(jī)二級(jí)WPS考試題庫(kù)380題(含答案)
- (高清版)DZT 0399-2022 礦山資源儲(chǔ)量管理規(guī)范
- 初一英語(yǔ)英語(yǔ)閱讀理解專項(xiàng)訓(xùn)練15篇
- 廣西貴港市2023年中考物理試題(原卷版)
- 仁愛(ài)英語(yǔ)八年級(jí)閱讀理解測(cè)試題和答案
- DB11∕T 1875-2021 市政工程施工安全操作規(guī)程
- 傳統(tǒng)節(jié)日春節(jié)英文介紹課件
- 水資源論證報(bào)告
- 實(shí)現(xiàn)結(jié)構(gòu)化:初中語(yǔ)文大單元教學(xué)設(shè)計(jì)的核心
評(píng)論
0/150
提交評(píng)論