1. 定義
將一個(gè)請(qǐng)求從鏈?zhǔn)降氖锥税l(fā)出,沿著鏈的路徑依次傳遞給每個(gè)節(jié)點(diǎn)對(duì)象,直到有對(duì)象處理這個(gè)請(qǐng)求為止这弧,使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免了請(qǐng)求發(fā)送者與接收者之間的耦合關(guān)系撮奏,使編程更有靈活性。
2. 使用場(chǎng)景
1. 有多個(gè)對(duì)象可以處理同一個(gè)請(qǐng)求当宴,具體哪個(gè)對(duì)象處理該請(qǐng)求由運(yùn)行時(shí)刻自動(dòng)確定畜吊;
2. 在不明確指定接收者的情況下,向多個(gè)對(duì)象中的一個(gè)提交一個(gè)請(qǐng)求户矢;
3. 可動(dòng)態(tài)指定一組對(duì)象處理請(qǐng)求玲献。
3. 優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1. 降低耦合度,將請(qǐng)求的發(fā)送者和接收者解耦梯浪;
2. 簡(jiǎn)化了對(duì)象捌年,使對(duì)象不需要知道鏈的結(jié)構(gòu);
3. 增強(qiáng)給對(duì)象指派職責(zé)的靈活性, 通過改變鏈內(nèi)的成員或者調(diào)動(dòng)它們的次序挂洛,允許動(dòng)態(tài)地新增或者刪除責(zé)任礼预;
缺點(diǎn):
1. 不能保證請(qǐng)求一定被接收;
2. 系統(tǒng)性能將受到一定影響虏劲,而且在進(jìn)行代碼調(diào)試時(shí)不太方便托酸,可能會(huì)造成循環(huán)調(diào)用;
3. 可能不容易觀察運(yùn)行時(shí)的特征柒巫,有礙于除錯(cuò)励堡;
4. Android源碼中的使用
Android中的觸摸事件的傳遞機(jī)制,就屬于責(zé)任鏈模式堡掏,從Activity到PhoneWindow应结,再到我們自己的RootView及子View層層傳遞,直到有View消費(fèi)該事件;
Okhttp 內(nèi)部使用了責(zé)任鏈模式來完成每個(gè) Interceptor 攔截器的調(diào)用鹅龄;
5. 實(shí)例演示
以公司中申請(qǐng)報(bào)銷費(fèi)用為例揩慕,不同領(lǐng)導(dǎo)可以批放不同額度的報(bào)銷,職員提交申請(qǐng)后扮休,申請(qǐng)由下往上傳遞迎卤,直到有領(lǐng)導(dǎo)處理該申請(qǐng);
1. 創(chuàng)建一個(gè)領(lǐng)導(dǎo)基類
2. 創(chuàng)建不同層級(jí)的領(lǐng)導(dǎo)實(shí)現(xiàn)類肛炮,依次為組長(zhǎng)止吐,主管宝踪,經(jīng)理侨糟,老板
3. 創(chuàng)建不同的領(lǐng)導(dǎo)對(duì)象,關(guān)聯(lián)責(zé)任鏈瘩燥,進(jìn)行報(bào)銷申請(qǐng)
?我是今陽秕重,如果想要進(jìn)階和了解更多的干貨,歡迎關(guān)注公眾號(hào)”今陽說“接收我的最新文章