成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

輕松學(xué)會(huì)責(zé)任鏈模式

cheukyin / 2032人閱讀

摘要:設(shè)計(jì)模式責(zé)任鏈模式顧名思義,責(zé)任鏈模式為請(qǐng)求創(chuàng)建了一個(gè)接收者對(duì)象的鏈。這種模式給予請(qǐng)求的類(lèi)型,對(duì)請(qǐng)求的發(fā)送者和接收者進(jìn)行解耦。增強(qiáng)給對(duì)象指派職責(zé)的靈活性。通過(guò)改變鏈內(nèi)的成員或者調(diào)動(dòng)它們的次序,允許動(dòng)態(tài)地新增或者刪除責(zé)任。

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

顧名思義,責(zé)任鏈模式(Chain of Responsibility Pattern)為請(qǐng)求創(chuàng)建了一個(gè)接收者對(duì)象的鏈。這種模式給予請(qǐng)求的類(lèi)型,對(duì)請(qǐng)求的發(fā)送者和接收者進(jìn)行解耦。這種類(lèi)型的設(shè)計(jì)模式屬于行為型模式。

在這種模式中,通常每個(gè)接收者都包含對(duì)另一個(gè)接收者的引用。如果一個(gè)對(duì)象不能處理該請(qǐng)求,那么它會(huì)把相同的請(qǐng)求傳給下一個(gè)接收者,依此類(lèi)推。

簡(jiǎn)單的說(shuō)就是: 你處理不了的事情就交給你的下一級(jí)(級(jí)別更高)的去處理。
介紹:

意圖:避免請(qǐng)求發(fā)送者與接收者耦合在一起,讓多個(gè)對(duì)象都有可能接收請(qǐng)求,將這些對(duì)象連接成一條鏈,并且沿著這條鏈傳遞請(qǐng)求,直到有對(duì)象處理它為止。

主要解決:職責(zé)鏈上的處理者負(fù)責(zé)處理請(qǐng)求,客戶(hù)只需要將請(qǐng)求發(fā)送到職責(zé)鏈上即可,無(wú)須關(guān)心請(qǐng)求的處理細(xì)節(jié)和請(qǐng)求的傳遞,所以職責(zé)鏈將請(qǐng)求的發(fā)送者和請(qǐng)求的處理者解耦了。在某一場(chǎng)景是可以減少大量的if else代碼

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

缺點(diǎn): 1、不能保證請(qǐng)求一定被接收。 2、系統(tǒng)性能將受到一定影響,而且在進(jìn)行代碼調(diào)試時(shí)不太方便,可能會(huì)造成循環(huán)調(diào)用。 3、可能不容易觀(guān)察運(yùn)行時(shí)的特征,有礙于除錯(cuò)。

話(huà)不多說(shuō)直接上代碼

創(chuàng)建一個(gè)抽象的程序員類(lèi):AbstractCoder

public abstract class AbstractCoder {

    public static int SIMPLEBUG = 1;
    public static int COMPLEXBUG = 2;
    public static int DIFFICULTBUG = 3;


    protected int level;

    protected AbstractCoder nextCoder;

    public void setNextCoder(AbstractCoder nextCoder) {
        this.nextCoder = nextCoder;
    }

    public void resolveBug(int level, String message) {

        //大于處理的權(quán)限
        if (this.level < level) {
            nextCoder.resolveBug(level, message);
        } else {
            write(message);
        }
    }

    abstract protected void write(String message);
}

創(chuàng)建不同的程序員類(lèi)去擴(kuò)展抽象類(lèi),每個(gè)程序員做著不同的事情。

LongHairCoder:

public class LongHairCoder extends AbstractCoder {

    public LongHairCoder(int level) {
        this.level = level;
    }

    @Override
    protected void write(String message) {
        System.out.println("初級(jí)程序員處理:" + message);
    }
}

ShortHairCoder:

public class ShortHairCoder extends AbstractCoder {

    public ShortHairCoder(int level) {
        this.level = level;
    }

    @Override
    protected void write(String message) {
        System.out.println("禿頭程序員處理:" + message);
    }
}

BaldHeadCoder:

public class BaldHeadCoder extends AbstractCoder {

    public BaldHeadCoder(int level) {
        this.level = level;
    }

    @Override
    protected void write(String message) {
        System.out.println("光頭程序員處理:" + message);
    }

}

實(shí)現(xiàn)責(zé)任鏈: ChainPatternDemo

public class ChainPattern {

    public static AbstractCoder getChainOfLoggers() {

        AbstractCoder longHairCoder = new LongHairCoder(AbstractCoder.SIMPLEBUG);
        AbstractCoder shortHairCoder = new ShortHairCoder(AbstractCoder.COMPLEXBUG);
        AbstractCoder baldHeadCoder = new BaldHeadCoder(AbstractCoder.DIFFICULTBUG);

        longHairCoder.setNextCoder(shortHairCoder);
        shortHairCoder.setNextCoder(baldHeadCoder);

        return longHairCoder;
    }

    public static void main(String[] args) {
        AbstractCoder abstractCoder = getChainOfLoggers();

        abstractCoder.resolveBug(AbstractCoder.SIMPLEBUG,  "一個(gè)簡(jiǎn)單的bug");

        abstractCoder.resolveBug(AbstractCoder.COMPLEXBUG, "一個(gè)復(fù)雜的bug");

        abstractCoder.resolveBug(AbstractCoder.DIFFICULTBUG,  "一個(gè)困難的bug");
    }


}

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

初級(jí)程序員處理:一個(gè)簡(jiǎn)單的bug
禿頭程序員處理:一個(gè)復(fù)雜的bug
光頭程序員處理:一個(gè)困難的bug

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/73564.html

相關(guān)文章

  • 假如時(shí)光倒流,我會(huì)這么學(xué)習(xí)Java

    摘要:看起來(lái)沒(méi)有集合框架,線(xiàn)程,等那么耀眼,但它可是很多框架的基礎(chǔ)啊回復(fù)反射查看相關(guān)文章,先把基礎(chǔ)學(xué)會(huì),后面的得用到它。 回頭看看, 我進(jìn)入Java 領(lǐng)域已經(jīng)快15個(gè)年頭了, 雖然學(xué)的也一般, 但是分享下我的心得,估計(jì)也能幫大家少走點(diǎn)彎路。[入門(mén)]我在2001年之前是C/C++陣營(yíng), 有C和面向?qū)ο蟮幕A(chǔ), 后來(lái)轉(zhuǎn)到Java ,發(fā)現(xiàn)沒(méi)有指針的Java真是好簡(jiǎn)單, 另外Java 的類(lèi)庫(kù)好用的讓...

    bladefury 評(píng)論0 收藏0
  • 又被面試官問(wèn)設(shè)計(jì)模式了,我真的是

    摘要:面試官要不你來(lái)手寫(xiě)下單例模式唄候選者單例模式一般會(huì)有好幾種寫(xiě)法候選者餓漢式簡(jiǎn)單懶漢式在方法聲明時(shí)加鎖雙重檢驗(yàn)加鎖進(jìn)階懶漢式靜態(tài)內(nèi)部類(lèi)優(yōu)雅懶漢式枚舉候選者所謂餓漢式指的就是還沒(méi)被用到,就直接初始化了對(duì)象。面試官:我看你的簡(jiǎn)歷寫(xiě)著熟悉常見(jiàn)的設(shè)計(jì)模式,要不你來(lái)簡(jiǎn)單聊聊你熟悉哪幾個(gè)吧?候選者:常見(jiàn)的工廠(chǎng)模式、代理模式、模板方法模式、責(zé)任鏈模式、單例模式、包裝設(shè)計(jì)模式、策略模式等都是有所了解的候選者:...

    不知名網(wǎng)友 評(píng)論0 收藏0
  • 利用責(zé)任模式設(shè)計(jì)一個(gè)攔截器

    摘要:前言近期在做的攔截器功能,正好用到了責(zé)任鏈模式。通過(guò)官方圖就可以非常清楚的看出是一個(gè)責(zé)任鏈模式用責(zé)任鏈模式設(shè)計(jì)一個(gè)攔截器對(duì)于攔截器來(lái)說(shuō)使用責(zé)任鏈模式再好不過(guò)了。設(shè)置攔截器到責(zé)任鏈中時(shí)通過(guò)反射將的值保存到各個(gè)攔截器中。 showImg(https://segmentfault.com/img/remote/1460000016756077?w=1733&h=1300); 前言 近期在做 ...

    dreamans 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<