国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計(jì)模式:責(zé)任鏈模式

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式:責(zé)任鏈模式。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

責(zé)任鏈模式(Chain of Responsibility Pattern)是一種行為型設(shè)計(jì)模式,它允許多個(gè)對象按照順序處理請求,直到其中一個(gè)對象能夠處理該請求為止。責(zé)任鏈模式將請求發(fā)送者和接收者解耦,使得多個(gè)對象都有機(jī)會(huì)處理請求,同時(shí)避免了請求發(fā)送者與接收者之間的直接耦合關(guān)系。

在責(zé)任鏈模式中,請求被沿著一個(gè)鏈傳遞,每個(gè)對象都有機(jī)會(huì)處理請求或?qū)⑵鋫鬟f給鏈中的下一個(gè)對象。每個(gè)對象在收到請求后,可以選擇處理請求或?qū)⑵鋫鬟f給下一個(gè)對象。這樣,請求會(huì)依次經(jīng)過鏈中的對象,直到有一個(gè)對象能夠處理它為止。

組件

責(zé)任鏈模式通常包含以下角色:

  1. 抽象處理者(Handler):定義了處理請求的接口,通常包含一個(gè)指向下一個(gè)處理者的引用。
  2. 具體處理者(Concrete Handler):實(shí)現(xiàn)了處理請求的方法,如果自己無法處理請求,則將其傳遞給下一個(gè)處理者。

代碼示例

abstract class Handler {
    private Handler nextHandler;
     public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }
     public void handleRequest(int request) {
        if (canHandle(request)) {
            processRequest(request);
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        }
    }
     protected abstract boolean canHandle(int request);
     protected abstract void processRequest(int request);
}
// 具體處理者A
class ConcreteHandlerA extends Handler {
    protected boolean canHandle(int request) {
        return request >= 0 && request < 10;
    }
     protected void processRequest(int request) {
        System.out.println("ConcreteHandlerA 處理請求:" + request);
    }
}
// 具體處理者B
class ConcreteHandlerB extends Handler {
    protected boolean canHandle(int request) {
        return request >= 10 && request < 20;
    }
     protected void processRequest(int request) {
        System.out.println("ConcreteHandlerB 處理請求:" + request);
    }
}
// 具體處理者C
class ConcreteHandlerC extends Handler {
    protected boolean canHandle(int request) {
        return request >= 20 && request < 30;
    }
     protected void processRequest(int request) {
        System.out.println("ConcreteHandlerC 處理請求:" + request);
    }
}
// 客戶端代碼
public class Main {
    public static void main(String[] args) {
        // 創(chuàng)建責(zé)任鏈
        Handler handlerA = new ConcreteHandlerA();
        Handler handlerB = new ConcreteHandlerB();
        Handler handlerC = new ConcreteHandlerC();
        handlerA.setNextHandler(handlerB);
        handlerB.setNextHandler(handlerC);
         // 發(fā)送請求
        handlerA.handleRequest(5);
        handlerA.handleRequest(15);
        handlerA.handleRequest(25);
    }
}

在上述示例中,我們定義了抽象處理者(Handler)和具體處理者(ConcreteHandlerA、ConcreteHandlerB、ConcreteHandlerC)。每個(gè)處理者都有一個(gè)指向下一個(gè)處理者的引用,通過 setNextHandler() 方法進(jìn)行設(shè)置。

在客戶端代碼中,我們創(chuàng)建了一個(gè)責(zé)任鏈,并將請求發(fā)送給第一個(gè)處理者(handlerA)。每個(gè)處理者根據(jù)自己的條件判斷是否能處理請求,如果可以處理,則進(jìn)行處理;否則將請求傳遞給下一個(gè)處理者。

這個(gè)示例展示了如何使用Java實(shí)現(xiàn)責(zé)任鏈模式,通過責(zé)任鏈的方式依次處理請求,直到找到能夠處理請求的處理者為止。

源碼中使用

責(zé)任鏈模式在源碼中有很多應(yīng)用。以下是一些常見的源碼中使用責(zé)任鏈模式的情況:

  1. Java中的異常處理機(jī)制:Java中的異常處理機(jī)制就是一種責(zé)任鏈模式的應(yīng)用。當(dāng)一個(gè)異常被拋出時(shí),會(huì)從當(dāng)前方法開始向上查找匹配的異常處理器,直到找到能夠處理該異常的處理器為止。
  2. Servlet中的過濾器(Filter):Servlet中的過濾器也使用了責(zé)任鏈模式。多個(gè)過濾器按照一定的順序形成一個(gè)責(zé)任鏈,每個(gè)過濾器可以對請求進(jìn)行處理或者傳遞給下一個(gè)過濾器進(jìn)行處理。
  3. Spring框架中的攔截器(Interceptor):Spring框架的攔截器也是一種責(zé)任鏈模式的應(yīng)用。攔截器可以在請求處理前后進(jìn)行一些額外的操作,如權(quán)限驗(yàn)證、日志記錄等。
  4. Android中的事件分發(fā)機(jī)制:Android中的事件分發(fā)機(jī)制也使用了責(zé)任鏈模式。事件從頂層View開始向下傳遞,每個(gè)View可以對事件進(jìn)行處理或者傳遞給下一個(gè)View進(jìn)行處理。
    這些是責(zé)任鏈模式在源碼中的一些常見應(yīng)用。責(zé)任鏈模式通過形成一個(gè)責(zé)任鏈,將請求的處理邏輯拆分成多個(gè)處理者,每個(gè)處理者負(fù)責(zé)處理或傳遞請求。這樣可以實(shí)現(xiàn)解耦和靈活的處理邏輯。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  1. 解耦請求發(fā)送者和接收者:責(zé)任鏈模式將請求的發(fā)送者和接收者解耦,發(fā)送者無需知道具體的接收者,只需要將請求發(fā)送給責(zé)任鏈的第一個(gè)處理者即可。
  2. 可擴(kuò)展性和靈活性:責(zé)任鏈模式可以動(dòng)態(tài)地添加、修改或刪除處理者,靈活地調(diào)整責(zé)任鏈的結(jié)構(gòu)和順序,以滿足不同的需求。
  3. 可以對請求進(jìn)行過濾和處理:責(zé)任鏈模式允許每個(gè)處理者對請求進(jìn)行過濾和處理,可以根據(jù)不同的條件選擇是否處理請求,以及如何處理請求。
  4. 可以降低耦合度:責(zé)任鏈模式將請求的發(fā)送者和接收者解耦,減少了它們之間的直接依賴關(guān)系,從而降低了耦合度。
    缺點(diǎn):
  5. 請求可能未被處理:責(zé)任鏈模式?jīng)]有保證請求一定會(huì)被處理,如果責(zé)任鏈沒有正確配置或者沒有處理者能夠處理該請求,請求可能會(huì)被忽略。
  6. 可能存在性能問題:當(dāng)責(zé)任鏈較長時(shí),請求需要依次經(jīng)過每個(gè)處理者,可能會(huì)導(dǎo)致性能下降。同時(shí),過多的處理者也會(huì)增加系統(tǒng)的復(fù)雜性。
  7. 可能導(dǎo)致調(diào)試?yán)щy:由于請求的處理者是動(dòng)態(tài)變化的,當(dāng)出現(xiàn)問題時(shí),可能需要跟蹤整個(gè)責(zé)任鏈來定位問題,增加了調(diào)試的難度。

總結(jié)

責(zé)任鏈模式通過將請求的發(fā)送者和接收者解耦,提供了一種靈活和可擴(kuò)展的處理機(jī)制。它可以對請求進(jìn)行過濾和處理,降低耦合度。然而,責(zé)任鏈模式也可能導(dǎo)致請求未被處理、性能問題以及調(diào)試?yán)щy。在使用責(zé)任鏈模式時(shí),需要根據(jù)具體情況權(quán)衡其優(yōu)缺點(diǎn),確保合理使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-732237.html

到了這里,關(guān)于設(shè)計(jì)模式:責(zé)任鏈模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【設(shè)計(jì)模式】Java 設(shè)計(jì)模式之責(zé)任鏈模式(Chain of Responsibility)

    責(zé)任鏈模式(Chain of Responsibility) 一、概述 責(zé)任鏈模式是一種行為設(shè)計(jì)模式,它允許請求在對象鏈中傳遞。每個(gè)對象都有機(jī)會(huì)處理該請求,并且能將其傳遞給鏈中的下一個(gè)對象。這種模式為請求創(chuàng)建了一個(gè)處理對象的鏈,并沿著這條鏈傳遞該請求,直到有一個(gè)對象處理它為止

    2024年03月22日
    瀏覽(25)
  • 【玩轉(zhuǎn)23種Java設(shè)計(jì)模式】行為型模式篇:責(zé)任鏈模式

    軟件設(shè)計(jì)模式(Design pattern),又稱設(shè)計(jì)模式,是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。 匯總目錄鏈接:【玩轉(zhuǎn)23種Java設(shè)計(jì)模式】學(xué)習(xí)目錄匯總

    2024年02月13日
    瀏覽(16)
  • Java設(shè)計(jì)模式-責(zé)任鏈(Chain of Responsibility)模式

    Java設(shè)計(jì)模式-責(zé)任鏈(Chain of Responsibility)模式

    Java責(zé)任鏈(Chain of Responsibility)設(shè)計(jì)模式是指很多處理對象構(gòu)成一個(gè)鏈,鏈中前一個(gè)對象指向后一個(gè)對象。請求在鏈中傳遞,一個(gè)請求可以被一個(gè)或者多個(gè)對象處理。調(diào)用方(即客戶端)不知道請求會(huì)被鏈中的哪個(gè)對象處理,所以責(zé)任鏈模式可以方便組織責(zé)任鏈而不影響調(diào)用

    2024年02月16日
    瀏覽(19)
  • Java設(shè)計(jì)模式—責(zé)任鏈模式(Chin of Responsibility)

    Java設(shè)計(jì)模式—責(zé)任鏈模式(Chin of Responsibility)

    目錄 前言 一、責(zé)任鏈模式的簡介 二、責(zé)任鏈模式的概念 三、責(zé)任鏈模式的作用 四、責(zé)任鏈模式的優(yōu)、缺點(diǎn) 1.責(zé)任鏈模式的優(yōu)點(diǎn) 2.責(zé)任鏈模式的缺點(diǎn) 五、責(zé)任鏈模式的應(yīng)用場景 六、代碼案例 UML類圖 ?1.定義一個(gè)請求枚舉類 ?2.定義一個(gè)請求類 3.定義一個(gè)抽象處理接口 4、定

    2024年02月08日
    瀏覽(27)
  • Java 大廠八股文面試專題-設(shè)計(jì)模式 工廠方法模式、策略模式、責(zé)任鏈模式

    Java 大廠八股文面試專題-設(shè)計(jì)模式 工廠方法模式、策略模式、責(zé)任鏈模式

    ????????在平時(shí)的開發(fā)中,涉及到設(shè)計(jì)模式的有兩塊內(nèi)容,第一個(gè)是我們 平時(shí)使用的框架 (比如spring、mybatis等),第二個(gè)是我們自己開發(fā)業(yè)務(wù)使用的設(shè)計(jì)模式。 ????????面試官一般比較關(guān)心的是你在開發(fā)過程中, 有沒有使用過設(shè)計(jì)模式,或者你在簡歷上寫了關(guān)于設(shè)計(jì)

    2024年02月10日
    瀏覽(29)
  • Java設(shè)計(jì)模式之責(zé)任鏈模式(UML類圖分析+代碼詳解)

    Java設(shè)計(jì)模式之責(zé)任鏈模式(UML類圖分析+代碼詳解)

    大家好,我是一名在算法之路上不斷前進(jìn)的小小程序猿!體會(huì)算法之美,領(lǐng)悟算法的智慧~ 希望各位博友走過路過可以給我點(diǎn)個(gè)免費(fèi)的贊,你們的支持是我不斷前進(jìn)的動(dòng)力?。?加油吧!未來可期??! 本文將介紹java設(shè)計(jì)模式之責(zé)任鏈模式 OA系統(tǒng)采購審批需求 傳統(tǒng)方案解決OA系

    2024年02月06日
    瀏覽(16)
  • Java設(shè)計(jì)模式之行為型-責(zé)任鏈模式(UML類圖+案例分析)

    Java設(shè)計(jì)模式之行為型-責(zé)任鏈模式(UML類圖+案例分析)

    目錄 一、基礎(chǔ)概念 二、UML類圖 三、角色設(shè)計(jì) 四、案例分析 4.1、在Java中實(shí)現(xiàn) 4.2、在SpringBoot中實(shí)現(xiàn)? 五、總結(jié)? 責(zé)任鏈模式是一種行為設(shè)計(jì)模式,它允許你將請求沿著處理者鏈進(jìn)行發(fā)送。請求會(huì)被鏈上每個(gè)處理者處理,直到請求被處理完畢。該模式主要解決的是請求的發(fā)送者和

    2024年02月15日
    瀏覽(22)
  • 設(shè)計(jì)模式——責(zé)任鏈模式

    設(shè)計(jì)模式——責(zé)任鏈模式

    使多個(gè)對象都有機(jī)會(huì)處理請求,從而避免了請求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,知道有對象處理它為止。 優(yōu)點(diǎn) 能將請求和處理分開。請求者可以不用知道是誰處理的,處理者可以不用知道請求的全貌,兩者解耦提高系

    2024年02月15日
    瀏覽(17)
  • 設(shè)計(jì)模式—責(zé)任鏈模式

    設(shè)計(jì)模式—責(zé)任鏈模式

    一、待解決問題 : 減少代碼中 if else 語句,降低代碼圈復(fù)雜度或深度,增強(qiáng)可讀性。 1、需求背景: 采購訂單創(chuàng)建,需要驗(yàn)證采購員、物料、供應(yīng)商、供應(yīng)商的銀行賬號(hào)等信息。如采購員權(quán)限到期、或供應(yīng)商失效等問題,都無法下單。 2、代碼如下: 學(xué)習(xí)使用責(zé)任鏈模式后

    2024年02月10日
    瀏覽(19)
  • 《設(shè)計(jì)模式》責(zé)任鏈模式

    《設(shè)計(jì)模式》責(zé)任鏈模式

    定義 : 責(zé)任鏈模式將鏈中每一個(gè)節(jié)點(diǎn)都看成一個(gè)對象,并且將這些節(jié)點(diǎn)對象連成一條鏈,請求會(huì)沿著這條鏈進(jìn)行傳遞,直到有對象處理它為止,這使得多個(gè)對象都有機(jī)會(huì)接收請求,避免了請求發(fā)送者和接收者之間的耦合。 屬于 行為型 設(shè)計(jì)模式。 責(zé)任鏈模式的角色組成 :

    2024年02月13日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包