亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java 設計模式之責任鏈模式及異步責任鏈詳解

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

一、定義

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

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

在這里插入圖片描述

責任鏈模式屬于行為型模式。

二、普通責任鏈模式

在這里插入圖片描述

抽象處理類:AbstractProcessor

/**
 * 抽象處理類
 */
public abstract class AbstractProcessor {
    // 責任鏈
    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());
    }
}

測試類:ProcessorMainTest

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

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

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

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

paramsProcessor>>>>>>>>>>Java責任鏈模式
checkProcessor>>>>>>>>>>Java責任鏈模式
finalProcessor>>>>>>>>>>Java責任鏈模式

三、異步責任鏈模式

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

在這里插入圖片描述

抽象處理類:AbstractAsynProcessor

/**
 * 異步責任鏈:采用線程、生產(chǎn)者消費者模式實現(xiàn)
 */
public abstract class AbstractAsynProcessor extends Thread {
    // 用于存放當前責任鏈需要處理的對象
    protected BlockingQueue<Object> queue;
    // 鏈路對象
    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)者消費者
                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() {
        // 初始化隊列
        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());
    }
}

測試類:AsynProcessorMainTest

public class AsynProcessorMainTest {
    public static void main(String[] args) throws InterruptedException {
        /**
         * 構(gòu)建一個鏈路
         * 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("請輸入:");
            asynParamsProcessor.getQueue().put(input.next());
        }
    }
}

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

請輸入:Java異步責任鏈
asynParamsProcessor>>>>>>>>>>Java異步責任鏈
asynCheckProcessor>>>>>>>>>>Java異步責任鏈
asynFinalProcessor>>>>>>>>>>Java異步責任鏈

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

相關(guān)文章

  • 分析Spring框架之設計與實現(xiàn)資源加載器

    分析Spring框架之設計與實現(xiàn)資源加載器

    Spring框架是由于軟件開發(fā)的復雜性而創(chuàng)建的。然而,Spring的用途不僅僅限于服務器端的開發(fā)。從簡單性、可測試性和松耦合性角度而言,絕大部分Java應用都可以從Spring中受益。今天來分析它的設計與實現(xiàn)資源加載器,從Spring.xml解析和注冊Bean對象
    2021-06-06
  • java通過共享變量結(jié)束run停止線程的方法示例

    java通過共享變量結(jié)束run停止線程的方法示例

    這篇文章主要介紹了java通過共享變量結(jié)束run停止線程的方法,大家參考使用
    2013-11-11
  • 使用MyBatis 動態(tài)update數(shù)據(jù)

    使用MyBatis 動態(tài)update數(shù)據(jù)

    使用mybatis寫sql,需要動態(tài)更新對象數(shù)據(jù),每次需要更新的字段不同,為了防止null空異常,就需要用動態(tài)sql了,下面給大家分享一段代碼關(guān)于mybatis動態(tài)update,需要的朋友參考下
    2016-11-11
  • idea導入配置Spring?Boot項目的詳細步驟教程

    idea導入配置Spring?Boot項目的詳細步驟教程

    這篇文章主要給大家介紹了關(guān)于idea導入配置Spring?Boot項目的詳細步驟,在項目開發(fā)過程中,無論是導入運行團隊開發(fā)的項目,還是一些開源項目,還是其他的項目,想要在IDEA中完整的運行起來總有很多坑,需要的朋友可以參考下
    2023-08-08
  • java模板引擎Thymeleaf和前端vue的區(qū)別及說明

    java模板引擎Thymeleaf和前端vue的區(qū)別及說明

    這篇文章主要介紹了java模板引擎Thymeleaf和前端vue的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringBoot攔截器實現(xiàn)項目防止接口重復提交

    SpringBoot攔截器實現(xiàn)項目防止接口重復提交

    基于SpringBoot框架來開發(fā)業(yè)務后臺項目時,接口重復提交是一個常見的問題,本文主要介紹了SpringBoot攔截器實現(xiàn)項目防止接口重復提交,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • 基于Java編寫一個通用返回工具類Result

    基于Java編寫一個通用返回工具類Result

    Java項目搭建時,常常需要去封裝一個通用型的Result工具類,下面小編就和大家分享一個已經(jīng)封裝好的常用的返回類,希望對大家有所幫助
    2023-07-07
  • 基于@ComponentScan注解及其XML配置方式

    基于@ComponentScan注解及其XML配置方式

    這篇文章主要介紹了基于@ComponentScan注解及其XML配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Spring Cloud Hystrix 服務容錯保護的原理實現(xiàn)

    Spring Cloud Hystrix 服務容錯保護的原理實現(xiàn)

    這篇文章主要介紹了Spring Cloud Hystrix 服務容錯保護的原理實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Java 并發(fā)編程ArrayBlockingQueue的實現(xiàn)

    Java 并發(fā)編程ArrayBlockingQueue的實現(xiàn)

    這篇文章主要介紹了Java 并發(fā)編程ArrayBlockingQueue的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02

最新評論