《Android源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn)》讀書筆記-責(zé)任鏈模式分析

責(zé)任鏈模式

介紹

對(duì)于鏈?zhǔn)浇Y(jié)構(gòu),將每一個(gè)節(jié)點(diǎn)看做一個(gè)對(duì)象,每一個(gè)對(duì)象擁有不同的處理邏輯,將一個(gè)請(qǐng)求從鏈?zhǔn)降氖锥税l(fā)出,沿著鏈的路徑一次傳遞給一個(gè)節(jié)點(diǎn)對(duì)象,直至有對(duì)象處理這個(gè)請(qǐng)求為止,我們將這樣一種模式成為責(zé)任鏈模式。

定義

使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免了發(fā)送者和接受者之間的耦合關(guān)系。將這些對(duì)象連成一條鏈,并沿著這條鏈傳遞改請(qǐng)求,直到有對(duì)象處理它為止。

使用場(chǎng)景

  • 多個(gè)對(duì)象可以處理同一個(gè)請(qǐng)求,但具體由哪個(gè)對(duì)象處理則在運(yùn)行時(shí)動(dòng)態(tài)決定。
  • 在請(qǐng)求處理者不明確的情況下向多個(gè)對(duì)象中的一個(gè)提交一個(gè)請(qǐng)求
  • 需要?jiǎng)討B(tài)指定一組對(duì)象處理請(qǐng)求

基本程序

  • 抽象處理類
public abstract class Handler {
    protected Handler nextHandler;//下一節(jié)點(diǎn)處理者

    public abstract void handle(String condition);//處理函數(shù)
}

  • 具體處理者1
public class FirstHandler extends Handler {
    @Override
    public void handle(String condition) {
        if (condition.equals("FirstHandler")) {
            handle(condition);
        } else {
            nextHandler.handle(condition);
        }
    }
}
  • 具體處理者2
public class SecondHandler extends Handler {
    @Override
    public void handle(String condition) {
        if (condition.equals("SecondHandler")) {
            handle(condition);
        } else {
            nextHandler.handle(condition);
        }
    }
}
  • 客戶類

    public class Client {
        public static void main(String[] args) {
            FirstHandler firstHandler = new FirstHandler();
            SecondHandler secondHandler = new SecondHandler();
            firstHandler.nextHandler = secondHandler;
            secondHandler.nextHandler = firstHandler;
            firstHandler.handle("SecondHandler");
        }
    }
    

角色介紹:

  • Handler :抽象處理者角色,聲明一個(gè)請(qǐng)求處理的方法,并在其中保持一個(gè)對(duì)下一個(gè)處理節(jié)點(diǎn)的 Handler 對(duì)象的引用。
  • FirstHandler , SecondHandler : 具體處理者角色,對(duì)請(qǐng)求進(jìn)行處理,如果不能處理則將請(qǐng)求轉(zhuǎn)發(fā)給下一個(gè)節(jié)點(diǎn)處理。

Android 中應(yīng)用

類似于 Android 中事件的分發(fā)處理, 有序廣播。

總結(jié)

  • 優(yōu)點(diǎn): 對(duì)請(qǐng)求者和處理者關(guān)系解耦,提高代碼靈活性,
  • 缺點(diǎn):對(duì)請(qǐng)求處理者進(jìn)行遍歷影響性能。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容