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

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

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

責(zé)任鏈(Chain of Resposibility) 模式

概念

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

  • 抽象處理者(Handler)角色:定義一個處理請求的接口,包含抽象處理方法和一個后繼連接。

  • 具體處理者(Concrete Handler)角色:實現(xiàn)抽象處理者的處理方法,判斷能否處理本次請求,如果可以處理請求則處理,否則將請求轉(zhuǎn)給他的后繼者。

  • 客戶類(Client)角色:創(chuàng)建處理鏈,并向鏈頭的具體處理者對象提交請求,他不關(guān)心處理細節(jié)和請求的傳遞過程。

代碼

需求1:a1 -> a2 -> a3

實現(xiàn)先a1處理完交給a2,a2處理完再交給a3的邏輯,即: a1 -> a2 -> a3

public class Teacher {

    private String name;

    public Teacher(String name) {
        this.name = name;
    }

    // 下一個處理的老師;1、鏈條的引用點
    private Teacher next;

    public Teacher getNext() {
        return next;
    }

    public void setNext(Teacher next) {
        this.next = next;
    }

    void handlerRequest() {
        System.out.println(this + "正在處理。。。。。。。。");
        // 2、下一個繼續(xù)
        if (next != null) {
            next.handlerRequest();
        }
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                '}';
    }
}

public class MainTest {
    public static void main(String[] args) {
        Teacher a1 = new Teacher("a1");
        Teacher a2 = new Teacher("a2");
        Teacher a3 = new Teacher("a3");

        // 3、構(gòu)造鏈條
        // a1->a2->a2
        a1.setNext(a2);
        a2.setNext(a3);

        a1.handlerRequest();

    }
}

測試結(jié)果:

Teacher{name='a1'}正在處理。。。。。。。。
Teacher{name='a2'}正在處理。。。。。。。。
Teacher{name='a3'}正在處理。。。。。。。。

需求2:1->2->3->本人->3->2->1

這個也就是我們學(xué)習(xí)過的Filter了

代碼實現(xiàn):

① Filter 接口

public interface Filter {
    void doFilter(Request request,Response response,FilterChain chain);
}
@Data
public class Request {
    // 請求內(nèi)容
    String msg;

    public Request(String msg) {
        this.msg = msg;
    }
}

@Data
public class Response {

    // 響應(yīng)內(nèi)容
    private String content;

    public Response(String content) {
        this.content = content;
    }
}

② Filter 的三個實現(xiàn)類
設(shè)計模式之責(zé)任鏈模式【Java實現(xiàn)】,設(shè)計模式,java,設(shè)計模式,責(zé)任鏈模式

public class HttpFilter implements Filter {
    @Override
    public void doFilter(Request request, Response response, FilterChain chain) {
        // 第一個filter的功能
        request.msg += ">>>";

        System.out.println("HttpFilter ... doFilter之前");
        // 放行
        chain.doFilter(request, response, chain);
        System.out.println("HttpFilter ... doFilter之后");
    }
}
public class CharacterFilter implements Filter {
    @Override
    public void doFilter(Request request, Response response, FilterChain chain) {
        // 功能
        request.msg += "====";

        System.out.println("CharacterFilter ... doFilter之前");
        // 放行
        chain.doFilter(request, response, chain);
        System.out.println("CharacterFilter ... doFilter之后");
    }
}
public class EncodingFilter implements Filter {
    @Override
    public void doFilter(Request request, Response response, FilterChain chain) {
        // 功能
        request.msg += "oooo";

        System.out.println("EncodingFilter ... doFilter之前");
        // 放行
        chain.doFilter(request, response, chain);
        System.out.println("EncodingFilter ... doFilter之后");
    }
}

③ 我們的目標(biāo)方法

public class My {
    void hello() {

        System.out.println("調(diào)用my.hello()方法");
    }
}

```![在這里插入圖片描述](https://img-blog.csdnimg.cn/7b173906028e45c7926d7b944096d929.png)


④ 維護鏈條

```java
/**
 * 靠他維護鏈條
 * handlerExecutionChain
 *
 * @author zhuicat
 * @since 2023/8/13 8:19
 */
public class FilterChain implements Filter {

    // 游標(biāo):記錄當(dāng)前執(zhí)行的步驟
    int cursor;

    // Filter 的鏈
    List<Filter> filterChain = new ArrayList<>();

    // 最終要執(zhí)行的目標(biāo)方法
    My target;

    // 添加 filter 方法
    void addFilter(Filter filter) {
        filterChain.add(filter);
    }

    @Override
    public void doFilter(Request request, Response response, FilterChain chain) {
        // 執(zhí)行第一個 filter ,一次往下

        // 游標(biāo)小于總數(shù)量filter一直往下獲取執(zhí)行
        if (cursor < filterChain.size()) {
            Filter filter = filterChain.get(cursor);
            cursor++;
            // 執(zhí)行 filter
            filter.doFilter(request, response, chain);
        } else {
            // filter執(zhí)行完了,需要執(zhí)行目標(biāo)方法了
            target.hello();
        }
    }

    public My getTarget() {
        return target;
    }

    public void setTarget(My target) {
        this.target = target;
    }
}

⑤ 主方法

public class MainTest {
    public static void main(String[] args) {
        FilterChain chain = new FilterChain();

        // web.xml
        HttpFilter httpFilter = new HttpFilter();
        CharacterFilter characterFilter = new CharacterFilter();
        EncodingFilter encodingFilter = new EncodingFilter();
        chain.addFilter(httpFilter);
        chain.addFilter(characterFilter);
        chain.addFilter(encodingFilter);

        chain.setTarget(new My());


        // filter 如何鏈?zhǔn)綀?zhí)行
        chain.doFilter(new Request("hello,world"), new Response("dddddddddddddddddd"), chain);
    }
}

⑥ 執(zhí)行結(jié)果

HttpFilter ... doFilter之前
CharacterFilter ... doFilter之前
EncodingFilter ... doFilter之前
調(diào)用my.hello()方法
EncodingFilter ... doFilter之后
CharacterFilter ... doFilter之后
HttpFilter ... doFilter之后

完成上述需求文章來源地址http://www.zghlxwxcb.cn/news/detail-651572.html

到了這里,關(guān)于設(shè)計模式之責(zé)任鏈模式【Java實現(xiàn)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月15日
    瀏覽(22)
  • 設(shè)計模式之責(zé)任鏈模式(二): 實現(xiàn)方式

    C++設(shè)計模式專欄: 相關(guān)文章系列 設(shè)計模式之責(zé)任鏈模式(一)-CSDN博客 目錄 1.引言 2.實現(xiàn)方式1 3.實現(xiàn)方式2 4.總結(jié)? ? ? ?? ????????責(zé)任鏈設(shè)計模式(Chain of Responsibiliy DesignPattern)簡稱職責(zé)鏈模式。在GOF的《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》中,它是這樣定義的:將請求的

    2024年04月27日
    瀏覽(43)
  • 【設(shè)計模式】用Java實現(xiàn)狀態(tài)模式

    狀態(tài)模式是一種行為設(shè)計模式,它允許對象在內(nèi)部狀態(tài)發(fā)生改變時改變其行為。該模式將對象的行為包裝在不同的狀態(tài)類中,使得對象的行為可以根據(jù)其當(dāng)前狀態(tài)動態(tài)改變。 狀態(tài)模式通常由以下幾個角色組成: 環(huán)境類(Context) :環(huán)境類是擁有狀態(tài)的對象,它將會根據(jù)當(dāng)前狀

    2024年02月10日
    瀏覽(31)
  • 設(shè)計模式-簡單工廠模式(靜態(tài)工廠模式)java實現(xiàn)

    設(shè)計模式-簡單工廠模式(靜態(tài)工廠模式)java實現(xiàn)

    簡單工廠模式根據(jù)所 提供的參數(shù) 數(shù)據(jù)返回幾個可能類中的一個類的實例。通常返回的類都有一個公共的父類和公共的方法。 ? 意圖 提供一個類,負責(zé)根據(jù)一定的條件創(chuàng)建某一具體類的實例。同時使用工廠模式也是為了隱藏創(chuàng)建對象的過程 角色及其職責(zé) (1)工廠(Creator)角色

    2024年02月13日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包