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

【玩轉(zhuǎn)23種Java設(shè)計(jì)模式】行為型模式篇:責(zé)任鏈模式

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

軟件設(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í)目錄匯總整理

一、簡介

??責(zé)任鏈模式(Chain of Responsibility),一種行為型設(shè)計(jì)模式,它為請求創(chuàng)建了一個(gè)接收者對象的鏈。這種模式給予了請求的處理更多的靈活性,可以動態(tài)地決定請求由哪個(gè)對象來處理。實(shí)際上,每個(gè)接收者對象都包含對另一個(gè)接收者對象的引用,如果當(dāng)前對象無法處理請求,它會將請求傳遞給下一個(gè)接收者對象。

主要角色:

  • 抽象處理器(Handler):處理器接口定義了處理請求的方法,通常會有一個(gè)處理請求的方法和設(shè)置下一個(gè)處理器的方法。
  • 具體處理器(ConcreteHandler):具體處理器實(shí)現(xiàn)處理器接口,處理請求或?qū)⒄埱髠鬟f給鏈上的下一個(gè)處理器。
  • 客戶端(Client):客戶端負(fù)責(zé)構(gòu)建處理器鏈,并向鏈上的第一個(gè)處理器發(fā)送請求。

二、實(shí)例

例如:員工請假,請假2天內(nèi),經(jīng)理審批;超過2天,不大于5天,總監(jiān)審批;超過5天,CTO審批。

1、請假類(LeaveRequest)

public class LeaveRequest {
    private int days;

    public LeaveRequest(int days) {
        this.days = days;
    }

    public int getDays() {
        return days;
    }
}

2、處理器接口(LeaveRequestHandler)

public interface LeaveRequestHandler {
    void setNextHandler(LeaveRequestHandler nextHandler);

    void handleRequest(LeaveRequest request);
}

3、經(jīng)理處理器(Manager)

@Slf4j
public class Manager implements LeaveRequestHandler {
    private LeaveRequestHandler nextHandler;

    @Override
    public void setNextHandler(LeaveRequestHandler nextHandler) {
        this.nextHandler = nextHandler;
    }

    @Override
    public void handleRequest(LeaveRequest request) {
        if (request.getDays() <= 2) {
        	log.info("審批流程處理 -> 經(jīng)理");
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        }
    }
}

4、總監(jiān)處理器(Commissioner)

@Slf4j
public class Commissioner implements LeaveRequestHandler {
    private LeaveRequestHandler nextHandler;

    @Override
    public void setNextHandler(LeaveRequestHandler nextHandler) {
        this.nextHandler = nextHandler;
    }

    @Override
    public void handleRequest(LeaveRequest request) {
        if (request.getDays() <= 5) {
	        log.info("審批流程處理 -> 總監(jiān)");
        } else {
            nextHandler.handleRequest(request);
        }
    }
}

5、CTO處理器(CTO)

@Slf4j
public class CTO implements LeaveRequestHandler {
    private LeaveRequestHandler nextHandler;

    @Override
    public void setNextHandler(LeaveRequestHandler nextHandler) {
        this.nextHandler = nextHandler;
    }

    @Override
    public void handleRequest(LeaveRequest request) {
        if (request.getDays() > 5) {
        	log.info("審批流程處理 -> CTO");
        } else {
            log.info("沒有流程節(jié)點(diǎn)");
        }
    }
}

6、客戶端(Client)

@Slf4j
public class Client {
    public static void main(String[] args) {
        LeaveRequestHandler manager = new Manager();
        LeaveRequestHandler commissioner = new Commissioner();
        LeaveRequestHandler cto = new CTO();

        manager.setNextHandler(commissioner);
        commissioner.setNextHandler(cto);

        log.info("請假10天");
        LeaveRequest request = new LeaveRequest(10);
        manager.handleRequest(request);
    }
}

輸出控制臺:文章來源地址http://www.zghlxwxcb.cn/news/detail-641869.html

請假10天
審批流程處理 -> CTO

三、總結(jié)

1、優(yōu)點(diǎn)

  • 降低耦合度。將請求的發(fā)送者和接收者解耦。
  • 簡化對象。對象不需要知道鏈的結(jié)構(gòu)。
  • 增加新的請求處理類很方便。
  • 增強(qiáng)給對象指派職責(zé)的靈活性。通過改變鏈內(nèi)的成員或者調(diào)動它們的次序,允許動態(tài)地新增或者刪除責(zé)任。

2、缺點(diǎn)

  • 不能保證請求一定被接收。
  • 對比較長的職責(zé)鏈,系統(tǒng)性能將受到一定影響。而且在進(jìn)行代碼調(diào)試時(shí)不太方便,可能會造成循環(huán)調(diào)用。

3、應(yīng)用場景

  • 有多個(gè)對象可以處理同一個(gè)請求,具體哪個(gè)對象處理該請求由運(yùn)行時(shí)刻自動確定。
  • 在不明確指定接收者的情況下,向多個(gè)對象中的一個(gè)提交一個(gè)請求。
  • 可動態(tài)指定一組對象處理請求。

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

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(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ì)模式——責(zé)任鏈模式

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

    在現(xiàn)實(shí)生活中,常常會出現(xiàn)這樣的事例:一個(gè)請求有多個(gè)對象可以處理,但每個(gè)對象的處理?xiàng)l件或權(quán)限不同。例如,公司員工請假,可批假的領(lǐng)導(dǎo)有部門負(fù)責(zé)人、副總經(jīng)理、總經(jīng)理等,但每個(gè)領(lǐng)導(dǎo)能批準(zhǔn)的天數(shù)不同,員工必須根據(jù)自己要請假的天數(shù)去找不同的領(lǐng)導(dǎo)簽名,也就

    2024年01月16日
    瀏覽(53)
  • 笨蛋學(xué)設(shè)計(jì)模式行為型模式-責(zé)任鏈模式【18】

    8.5.1概念 ? 責(zé)任鏈模式定義了一系列的處理器對象,每個(gè)處理器對象都包含對鏈表中下一個(gè)處理器對象的引用。在這條請求鏈條中,每當(dāng)一個(gè)請求發(fā)生時(shí),它就會被傳遞給鏈表的下一個(gè)處理器對象,直到某個(gè)處理器對象處理該請求為止。 8.5.2場景 ? 在我們公司內(nèi)部審批流程

    2024年01月23日
    瀏覽(16)
  • Java設(shè)計(jì)模式-責(zé)任鏈模式

    責(zé)任鏈模式,有的地方也會叫職責(zé)鏈模式。它指的是,為請求者和被請求者之間創(chuàng)建一條對象處理鏈路,避免請求發(fā)送者與接受者耦合在一起。 在責(zé)任鏈模式里,很多對象由每一個(gè)對象對其下家的引用而連接起來形成一條鏈。請求在這個(gè)鏈上傳遞,直到鏈上的某一個(gè)對象決定

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

    當(dāng)一個(gè)請求需要在多個(gè)對象之間傳遞,每個(gè)對象都可能處理該請求或?qū)⑵鋫鬟f給下一個(gè)對象。在這種情況下,需要避免將發(fā)送者與接收者之間的耦合,以及確定請求的處理方式。此時(shí)可使用責(zé)任鏈模式,它的優(yōu)點(diǎn)有降低耦合度(無需關(guān)心哪個(gè)對象會處理請求),靈活性(可以

    2024年02月21日
    瀏覽(19)
  • java設(shè)計(jì)模式(十五)責(zé)任鏈模式

    java設(shè)計(jì)模式(十五)責(zé)任鏈模式

    責(zé)任鏈模式(Chain of Responsibility) 使多個(gè)對象都有機(jī)會處理請求,從而避免請求的發(fā)送者和接受者之間的耦合關(guān)系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有對象能夠處理它。 抽象處理類: 主要包含一個(gè)指向下一處理類的成員變量 nextHandler 和一個(gè)處理請求的方

    2024年02月08日
    瀏覽(22)
  • 設(shè)計(jì)模式之責(zé)任鏈模式【Java實(shí)現(xiàn)】

    設(shè)計(jì)模式之責(zé)任鏈模式【Java實(shí)現(xiàn)】

    責(zé)任鏈(chain of Resposibility) 模式:為了避免請求發(fā)送者與多個(gè)請求處理者耦合在一起,于是將所有請求的處理者 通過前一對象記住其下一個(gè)對象的引用而連成一條鏈 ;當(dāng)有請求發(fā)生時(shí),可將請求沿著這條鏈傳遞,直到有對象處理它位置。屬于對象行為型模式。 抽象處理者

    2024年02月12日
    瀏覽(20)
  • Gof23設(shè)計(jì)模式之責(zé)任鏈模式

    責(zé)任鏈模式又名職責(zé)鏈模式,為了避免請求發(fā)送者與多個(gè)請求處理者耦合在一起,將所有請求的處理者通過前一對象記住其下一個(gè)對象的引用而連成一條鏈;當(dāng)有請求發(fā)生時(shí),可將請求沿著這條鏈傳遞,直到有對象處理它為止。 職責(zé)鏈模式主要包含以下角色: 抽象處理者(

    2024年02月09日
    瀏覽(25)
  • 【設(shè)計(jì)模式】Java 設(shè)計(jì)模式之責(zé)任鏈模式(Chain of Responsibility)

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

    2024年03月22日
    瀏覽(25)
  • 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)用方(即客戶端)不知道請求會被鏈中的哪個(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)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包