android源碼中使用的設計模式(結(jié)構(gòu)型模式--代理模式馋评,行為型模式--迭代器模式)

1.代理模式

1.1定義

為其他對象提供一種代理以控制對這個對象的訪問恨闪。

1.2 UML

代理模式
  • Subject:抽象主題類。聲明真實主題與代理的共同接口方法置谦,該類既可以是一個接口也可以是一個抽象類
  • RealSubject:真實主題類堂鲤,也叫委托類或者代理類
  • PoxySubject:代理類,該類持有一個對真實主題類的引用媒峡,在其實現(xiàn)接口方法中調(diào)用了真實主題中相應的接口方法執(zhí)行
  • Client:客戶端瘟栖,使用代理類的類型

PS:代理類對被代理對象有控制權(quán),可以決定代理類是否執(zhí)行

1.3使用場景

當不想直接訪問或者訪問某個對象困難時谅阿,可以通過代理訪問這個對象半哟,訪問對象和被訪問對象有一個共同的接口酬滤。

1.4 Java中的動態(tài)代理

Java動態(tài)代理類

java動態(tài)代理位于java.lang.reflect包下,一般主要涉及到以下兩個類:

  • A. Interface InvocationHandler:該接口中僅定義了一個方法Object:invoke(Object obj,Method method,Object[] args )
    在實際使用時寓涨,第一個參數(shù)obj一般是指代理類盯串,method是被代理的方法,args為該方法的參數(shù)數(shù)組戒良。這個抽象方法在動態(tài)代理類中動態(tài)實現(xiàn)体捏。
  • B. Proxy:動態(tài)代理類
  1. Protected Proxy(InvocationHandler h):構(gòu)造函數(shù),用于給內(nèi)部的h賦值
  2. Static Class getProxyClass (ClassLoader loader, Class[] interfaces):獲得一個 代理類糯崎,其中l(wèi)oader是類裝載器几缭,interfaces是真實類所擁有的全部接口的數(shù)組。
  3. Static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)
    返回代理類的一個實例沃呢,返回后的代理類可以當作被代理類使用 (可使用被代理類的在Subject接口中聲明過的方法)奏司。

1.5 代碼實現(xiàn)

A.動態(tài)代理和靜態(tài)代理一樣的部分

Subject:抽象主題

subject

realSubject:具體實現(xiàn)類

RealSubject

B.不要一樣的部分

1.靜態(tài)代理

PoxySubject

2.靜態(tài)代理調(diào)用

client

3.動態(tài)代理

動態(tài)代理

4.動態(tài)代理調(diào)用

動態(tài)代理調(diào)用

1.6 android源碼中的實現(xiàn)

android源碼中的代理模式
  • 1.IActivityManager作為ActivityManagerProxy和ActivityManagerNative的公共接口,所以兩個類具有部分相同的接口樟插,可以實現(xiàn)合理的代理模式
  • 2.ActivityManagerProxy代理類是ActivityManagerNative的內(nèi)部類
  • 3.ActivityManagerNative是個抽象類,真正發(fā)揮作用的是它的子類ActivityManagerService(系統(tǒng)Service組件)竿刁。
  • 4.ActivityManagerService是系統(tǒng)統(tǒng)一的Service黄锤,運行在獨立的進程中;通過系統(tǒng)ServiceManger獲仁嘲荨鸵熟;ActivityManager運行在一個進程里面,ActivityManagerService運行在另一個進程內(nèi)负甸,對象在不同的進程里面流强,其地址是相互獨立的;采用Binder機制跨進程通信呻待,所以我們可以得出這是一個RemoteProxy打月。

2.迭代器模式

2.1 定義

提供一中方法順序訪問一個容器對象的各個元素,而且不需要暴露該對象的內(nèi)部表示蚕捉。

2.2 UML

迭代器模式
  • Iterator:迭代器接口奏篙,負責定義訪問和遍歷元素的接口
  • ConcreteIterator:具體迭代器,主要是實現(xiàn)迭代器接口迫淹,并記錄遍歷的當前位置
  • Aggregate:容器接口類秘通,負責提供創(chuàng)建具體迭代器角色接口
  • ConcreteAggregate:具體的容器類,具體迭代器角色與該容器相關聯(lián)

2.3 具體實現(xiàn)

1.創(chuàng)建Iterator

public interface Iterator<T> {
    boolean hasNaxt();
    T next();
}

2.創(chuàng)建ConcreteIterator

具體實現(xiàn)

3.創(chuàng)建aggregate

public interface Aggregat<T> {
    void add(T obj);
 
    void remove(T obj);
 
    Iterator<T> iterator();
}

4.創(chuàng)建具體的aggregate

關聯(lián)

5.調(diào)用方法

調(diào)用方法

2.4 adroid源碼中的模式實現(xiàn)

  • A.典型的例子是數(shù)據(jù)庫查詢使用的Cursor敛熬,當我們使用SQLiteDatabase的query方法查詢數(shù)據(jù)庫肺稀,會返回一個Cursor游標對象,這個游標對象就是一個具體的迭代器应民。

  • B.在android我們很少自己定義一個Iterator话原。一般都是使用夕吻。在java中List,arrayList 中對存在一個iterator稿静。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梭冠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子改备,更是在濱河造成了極大的恐慌控漠,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悬钳,死亡現(xiàn)場離奇詭異盐捷,居然都是意外死亡,警方通過查閱死者的電腦和手機默勾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門碉渡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人母剥,你說我怎么就攤上這事滞诺。” “怎么了环疼?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵习霹,是天一觀的道長。 經(jīng)常有香客問我炫隶,道長淋叶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任伪阶,我火速辦了婚禮煞檩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘栅贴。我一直安慰自己斟湃,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布筹误。 她就那樣靜靜地躺著桐早,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厨剪。 梳的紋絲不亂的頭發(fā)上哄酝,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音祷膳,去河邊找鬼陶衅。 笑死,一個胖子當著我的面吹牛直晨,可吹牛的內(nèi)容都是我干的搀军。 我是一名探鬼主播膨俐,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼罩句!你這毒婦竟也來了焚刺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤门烂,失蹤者是張志新(化名)和其女友劉穎乳愉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屯远,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡蔓姚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了慨丐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坡脐。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖房揭,靈堂內(nèi)的尸體忽然破棺而出备闲,到底是詐尸還是另有隱情,我是刑警寧澤捅暴,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布浅役,位于F島的核電站,受9級特大地震影響伶唯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惧盹,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一乳幸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钧椰,春花似錦粹断、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至诊沪,卻和暖如春养筒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背端姚。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工晕粪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渐裸。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓巫湘,卻偏偏與公主長得像装悲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子尚氛,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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