Android設(shè)計模式——責(zé)任鏈模式(十一大行為型)

1.責(zé)任鏈模式介紹

? ? ? ? 責(zé)任鏈模式(Responsibility Pattern)址儒,是十一大行為型設(shè)計模式之一楼眷。

2.責(zé)任模式定義

? ? ? ? 使多個對象都有機會處理請求敞葛,從而避免了請求的發(fā)送者和接收者之間的耦合關(guān)系坏逢。將這些對象連成一條鏈淤袜,并沿著這條鏈傳遞該請求毒租,直到有對象處理它為止稚铣。

3.責(zé)任鏈模式的使用場景

? ? ? ? 多個對象可以處理同一請求,但具體由哪個對象處理則在運行時動態(tài)決定墅垮。

? ? ? ? 在請求處理者不明確的情況下向多個對象中的一個提交一個請求惕医。

? ? ? ? 需要動態(tài)指定一組對象處理請求。

4.UML類圖


UML類圖

5.角色介紹

? ? ? ? 1.AbstractHandler:抽象處理者角色噩斟,聲明一個請求處理的方法曹锨,并在其中保持一個對下一個處理節(jié)點Hanler對象的引用。

? ? ? ? 2.ConcreteHandler:具體處理者角色剃允,對請求進行處理沛简,如果不能處理則將該請求轉(zhuǎn)發(fā)給下一個節(jié)點上的處理對象。

? ? ? ? 3.AbstractRequest:抽象請求者斥废。

? ? ? ? 4.ConcreteRequest:具體請求者椒楣。

6.例子

抽象處理者(上圖)
抽象請求者(上圖)
具體處理者1,程序員(上圖)
具體處理者2牡肉,主管(上圖)
具體處理者2捧灰,主管(上圖)
具體請求者1(上圖)
具體請求者2(上圖)
具體請求者3(上圖)
客戶端調(diào)用(上圖)

例子分析

? ? ? ? 先聲明一個抽象處理者和一個抽象請求者。抽象處理者里引用一個請求處理的方法,同時保持一個對下一個處理節(jié)點Handler對象的引用毛俏,再寫一個抽象處理方法并在實現(xiàn)類中實現(xiàn)該方法炭庙,同時也還有一個處理級別。抽象請求者里有一個需要處理的內(nèi)容煌寇,也還有一個請求級別焕蹄。

? ? ? ? 在客戶端使用的時候,幾個具體處理者阀溶,需要給予下一個處理節(jié)點是誰腻脏,比如handler1.nextHandler = handler2;將處理者之間串聯(lián)起來成一條鏈,然后處理者處理請求银锻,并根據(jù)處理級別和請求級別進行是否處理以及轉(zhuǎn)發(fā)的判斷永品。

7.Android源碼中的責(zé)任鏈模式

? ? ? ? Android源碼里責(zé)任鏈模式的類似體現(xiàn)莫過于對事件的分發(fā)處理,每當(dāng)用戶接觸屏幕時击纬,Android都會將對應(yīng)的事件包裝成一個事件對象從ViewTree的頂部至上而下地分發(fā)傳遞鼎姐。

8.總結(jié)

? ? ? ? 責(zé)任鏈模式最大的優(yōu)點就是可以對請求者和處理者關(guān)系解耦,提高代碼的靈活性掉弛。其最大的缺點就是對鏈中請求處理者的遍歷症见,如果處理者太多那么遍歷必定會影響性能,特別是在一些遞歸調(diào)用中需要慎重殃饿。

PS:讀《Android源碼設(shè)計模式解析與實戰(zhàn)》中的責(zé)任鏈模式之后的一些筆記與感悟谋作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市乎芳,隨后出現(xiàn)的幾起案子遵蚜,更是在濱河造成了極大的恐慌,老刑警劉巖奈惑,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吭净,死亡現(xiàn)場離奇詭異,居然都是意外死亡肴甸,警方通過查閱死者的電腦和手機寂殉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來原在,“玉大人友扰,你說我怎么就攤上這事∈粒” “怎么了村怪?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長浮庐。 經(jīng)常有香客問我甚负,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任梭域,我火速辦了婚禮斑举,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘病涨。我一直安慰自己懂昂,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布没宾。 她就那樣靜靜地躺著,像睡著了一般沸柔。 火紅的嫁衣襯著肌膚如雪循衰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天褐澎,我揣著相機與錄音会钝,去河邊找鬼。 笑死工三,一個胖子當(dāng)著我的面吹牛迁酸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播俭正,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼奸鬓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了掸读?” 一聲冷哼從身側(cè)響起串远,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎儿惫,沒想到半個月后澡罚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡肾请,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年留搔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铛铁。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡隔显,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出避归,到底是詐尸還是另有隱情荣月,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布梳毙,位于F島的核電站哺窄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜萌业,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一坷襟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧生年,春花似錦婴程、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蒸绩,卻和暖如春衙四,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背患亿。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工传蹈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人步藕。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓惦界,卻偏偏與公主長得像,于是被迫代替她去往敵國和親咙冗。 傳聞我的和親對象是個殘疾皇子沾歪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,937評論 2 361