最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 設(shè)計(jì)模式之責(zé)任鏈模式及異步責(zé)任鏈詳解

 更新時(shí)間:2021年11月08日 14:27:38   作者:普通人zzz~  
顧名思義,責(zé)任鏈模式(Chain of Responsibility Pattern)為請(qǐng)求創(chuàng)建了一個(gè)接收者對(duì)象的鏈。這種模式給予請(qǐng)求的類型,對(duì)請(qǐng)求的發(fā)送者和接收者進(jìn)行解耦。這種類型的設(shè)計(jì)模式屬于行為型模式

一、定義

責(zé)任鏈模式(Chain of Responsibility Pattern):避免將一個(gè)請(qǐng)求的發(fā)送者與接受者耦合在一起,讓多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求。將接受請(qǐng)求的對(duì)象連接成一條鏈,并且沿著這條鏈傳遞請(qǐng)求,直到有一個(gè)對(duì)象能夠處理它為止。

在很多源碼都有涉及,如Mybatis攔截器、Filter…

在這里插入圖片描述

責(zé)任鏈模式屬于行為型模式。

二、普通責(zé)任鏈模式

在這里插入圖片描述

抽象處理類:AbstractProcessor

/**
 * 抽象處理類
 */
public abstract class AbstractProcessor {
    // 責(zé)任鏈
    private AbstractProcessor nextProcessor;

    public void setNextProcessor(AbstractProcessor nextProcessor){
        this.nextProcessor = nextProcessor;
    }

    /**
     * 鏈路調(diào)用
     * @param obj
     */
    public void execute(Object obj) {
        this.processor(obj);
        if (this.nextProcessor != null){
            this.nextProcessor.execute(obj);
        }
    }

    public abstract void processor(Object obj);
}

具體類:ParamsProcessor、CheckProcessor、FinalProcessor

public class ParamsProcessor extends AbstractProcessor{

    @Override
    public void processor(Object obj) {
        System.out.println("paramsProcessor>>>>>>>>>>" + obj.toString());
    }
}

public class CheckProcessor extends AbstractProcessor{

    @Override
    public void processor(Object obj) {
        System.out.println("checkProcessor>>>>>>>>>>" + obj.toString());
    }
}

public class FinalProcessor extends AbstractProcessor{

    @Override
    public void processor(Object obj) {
        System.out.println("finalProcessor>>>>>>>>>>" + obj.toString());
    }
}

測(cè)試類:ProcessorMainTest

public class ProcessorMainTest {
    public static void main(String[] args) {
        /**
         * 構(gòu)建一個(gè)鏈路
         * paramsProcessor -> checkProcessor -> finalProcessor
         */
        AbstractProcessor paramsProcessor = new ParamsProcessor();
        AbstractProcessor checkProcessor = new CheckProcessor();
        AbstractProcessor finalProcessor = new FinalProcessor();

        paramsProcessor.setNextProcessor(checkProcessor);
        checkProcessor.setNextProcessor(finalProcessor);

        paramsProcessor.execute("Java責(zé)任鏈模式");
    }
}

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

paramsProcessor>>>>>>>>>>Java責(zé)任鏈模式
checkProcessor>>>>>>>>>>Java責(zé)任鏈模式
finalProcessor>>>>>>>>>>Java責(zé)任鏈模式

三、異步責(zé)任鏈模式

異步責(zé)任鏈模式采用責(zé)任鏈模式、生產(chǎn)者消費(fèi)者模式組合。

在這里插入圖片描述

抽象處理類:AbstractAsynProcessor

/**
 * 異步責(zé)任鏈:采用線程、生產(chǎn)者消費(fèi)者模式實(shí)現(xiàn)
 */
public abstract class AbstractAsynProcessor extends Thread {
    // 用于存放當(dāng)前責(zé)任鏈需要處理的對(duì)象
    protected BlockingQueue<Object> queue;
    // 鏈路對(duì)象
    private AbstractAsynProcessor nextProcessor;

    /**
     * 執(zhí)行
     *
     * @param obj
     */
    public void execute(Object obj) throws InterruptedException {
        this.processor(obj);
        if (this.nextProcessor != null) {
            this.nextProcessor.getQueue().put(obj);
        }
    }

    @Override
    public void run() {
        // 執(zhí)行
        try {
            while (true) {
                // 生產(chǎn)者消費(fèi)者
                Object obj = this.queue.take();
                execute(obj);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public abstract void processor(Object obj);

    public BlockingQueue<Object> getQueue() {
        return queue;
    }

    public void setNextProcessor(AbstractAsynProcessor nextProcessor) {
        this.nextProcessor = nextProcessor;
    }
}

具體類:AsynParamsProcessor、AsynCheckProcessor、AsynFinalProcessor

public class AsynParamsProcessor extends AbstractAsynProcessor {

    public AsynParamsProcessor() {
        // 初始化隊(duì)列
        this.queue = new LinkedBlockingQueue<>();
    }

    @Override
    public void processor(Object obj) {
        System.out.println("asynParamsProcessor>>>>>>>>>>" + obj.toString());
    }
}

public class AsynCheckProcessor extends AbstractAsynProcessor {

    public AsynCheckProcessor(){
        this.queue = new LinkedBlockingQueue<>();
    }

    @Override
    public void processor(Object obj) {
        System.out.println("asynCheckProcessor>>>>>>>>>>" + obj.toString());
    }
}

public class AsynFinalProcessor extends AbstractAsynProcessor {

    public AsynFinalProcessor() {
        this.queue = new LinkedBlockingQueue<>();
    }

    @Override
    public void processor(Object obj) {
        System.out.println("asynFinalProcessor>>>>>>>>>>" + obj.toString());
    }
}

測(cè)試類:AsynProcessorMainTest

public class AsynProcessorMainTest {
    public static void main(String[] args) throws InterruptedException {
        /**
         * 構(gòu)建一個(gè)鏈路
         * asynParamsProcessor -> asynCheckProcessor -> asynFinalProcessor
         */
        AbstractAsynProcessor asynParamsProcessor = new AsynParamsProcessor();
        asynParamsProcessor.start();
        AbstractAsynProcessor asynCheckProcessor = new AsynCheckProcessor();
        asynCheckProcessor.start();
        AbstractAsynProcessor asynFinalProcessor = new AsynFinalProcessor();
        asynFinalProcessor.start();

        asynParamsProcessor.setNextProcessor(asynCheckProcessor);
        asynCheckProcessor.setNextProcessor(asynFinalProcessor);

        Scanner input = new Scanner(System.in);
        while (true) {
            Thread.sleep(1000);
            System.out.print("請(qǐng)輸入:");
            asynParamsProcessor.getQueue().put(input.next());
        }
    }
}

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

請(qǐng)輸入:Java異步責(zé)任鏈
asynParamsProcessor>>>>>>>>>>Java異步責(zé)任鏈
asynCheckProcessor>>>>>>>>>>Java異步責(zé)任鏈
asynFinalProcessor>>>>>>>>>>Java異步責(zé)任鏈

到此這篇關(guān)于Java 設(shè)計(jì)模式之責(zé)任鏈模式及異步責(zé)任鏈詳解的文章就介紹到這了,更多相關(guān)Java 設(shè)計(jì)模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文詳解Java攔截器與過(guò)濾器的使用

    一文詳解Java攔截器與過(guò)濾器的使用

    這篇文章主要為大家詳細(xì)介紹了Java中攔截器與過(guò)濾器的使用與區(qū)別,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定參考價(jià)值,需要的可以參考一下
    2022-04-04
  • Springboot測(cè)試類沒有bean注入問(wèn)題解析

    Springboot測(cè)試類沒有bean注入問(wèn)題解析

    這篇文章主要介紹了Springboot測(cè)試類沒有bean注入問(wèn)題解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • java實(shí)現(xiàn)在性能測(cè)試中進(jìn)行業(yè)務(wù)驗(yàn)證實(shí)例

    java實(shí)現(xiàn)在性能測(cè)試中進(jìn)行業(yè)務(wù)驗(yàn)證實(shí)例

    這篇文章主要為大家介紹了java實(shí)現(xiàn)在性能測(cè)試中進(jìn)行業(yè)務(wù)驗(yàn)證實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • JAVA字符串類型switch的底層原理詳析

    JAVA字符串類型switch的底層原理詳析

    這篇文章主要給大家介紹了關(guān)于JAVA字符串類型switch的底層原理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JAVA具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 代碼生成器MyBatisX:自動(dòng)生成代碼方式

    代碼生成器MyBatisX:自動(dòng)生成代碼方式

    MyBatisX是一款提高開發(fā)效率的插件,可以自動(dòng)生成Mapper、XML和Java實(shí)體類代碼,并支持?jǐn)?shù)據(jù)庫(kù)表的重置和JAP提示,安裝步驟簡(jiǎn)單,只需在IDEA的Plugin市場(chǎng)搜索并安裝MyBatisX,然后打開數(shù)據(jù)庫(kù)窗口選擇表進(jìn)行生成即可
    2024-11-11
  • Java線程監(jiān)聽,意外退出線程后自動(dòng)重啟的實(shí)現(xiàn)方法

    Java線程監(jiān)聽,意外退出線程后自動(dòng)重啟的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇Java線程監(jiān)聽,意外退出線程后自動(dòng)重啟的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Java設(shè)計(jì)模式之靜態(tài)工廠模式詳解

    Java設(shè)計(jì)模式之靜態(tài)工廠模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之靜態(tài)工廠模式,簡(jiǎn)單說(shuō)明了靜態(tài)工廠模式的概念、原理、實(shí)現(xiàn)與使用方法,需要的朋友可以參考下
    2017-09-09
  • 關(guān)于JAVA中stream流的基礎(chǔ)處理(獲取對(duì)象字段和對(duì)象批量處理等)

    關(guān)于JAVA中stream流的基礎(chǔ)處理(獲取對(duì)象字段和對(duì)象批量處理等)

    這篇文章主要介紹了關(guān)于JAVA中stream流的基礎(chǔ)處理,包含獲取對(duì)象字段、按字段排序、按字段去重、對(duì)象批量處理、指定字段轉(zhuǎn)數(shù)組等內(nèi)容,需要的朋友可以參考下
    2023-03-03
  • Shiro:自定義Realm實(shí)現(xiàn)權(quán)限管理方式

    Shiro:自定義Realm實(shí)現(xiàn)權(quán)限管理方式

    這篇文章主要介紹了Shiro:自定義Realm實(shí)現(xiàn)權(quán)限管理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中常用的6種排序算法詳細(xì)分解

    Java中常用的6種排序算法詳細(xì)分解

    這篇文章主要介紹了Java中常用的6種排序算法詳細(xì)分解,著重說(shuō)明每個(gè)算法的計(jì)算過(guò)程分解,是探究實(shí)現(xiàn)原理級(jí)的文章,對(duì)于深入理解這些算法有很大幫助,需要的朋友可以參考下
    2014-07-07

最新評(píng)論

华蓥市| 安徽省| 扬中市| 德令哈市| 谷城县| 兴义市| 涪陵区| 资兴市| 新蔡县| 义马市| 怀仁县| 松原市| 扶绥县| 平潭县| 泾川县| 金沙县| 赤城县| 新和县| 周宁县| 宝鸡市| 磴口县| 新密市| 阳朔县| 石屏县| 晋中市| 句容市| 临潭县| 太仆寺旗| 通江县| 神木县| 紫阳县| 仁布县| 廊坊市| 丰宁| 河北省| 大城县| 桑日县| 普宁市| 洪湖市| 巴彦淖尔市| 巴青县|