責任鏈模式

什么意思呢?

就是有這么一個鏈條,你也不用管它具體怎么鏈的,你只需要給它一個輸入,它就能找到恰當?shù)囊画h(huán)來處理你的輸入,就這么個意思。很顯然,這對于使用者來說是非常方便的。

類圖

類圖.png

調用

package com.company;

public class Main {

    public static void main(String[] args) {
    // write your code here
        AbstractReceiver chain = installChain();

        chain.chainElementInput(AbstractReceiver.receiver2);
        chain.chainElementInput(AbstractReceiver.receiver1);
        chain.chainElementInput(AbstractReceiver.receiver3);
    }

    /**
     * 組裝責任鏈
     * @return
     */
    public static AbstractReceiver installChain() {
        AbstractReceiver receiver1 = new Receiver1(AbstractReceiver.receiver1);
        AbstractReceiver receiver2 = new Receiver2(AbstractReceiver.receiver2);
        AbstractReceiver receiver3 = new Receiver3(AbstractReceiver.receiver3);

        receiver1.setNextRecevier(receiver2);
        receiver2.setNextRecevier(receiver3);

        return receiver1;
    }
}

結果

com.company.Receiver2
com.company.Receiver1
com.company.Receiver3

Process finished with exit code 0

抽象接收者

package com.company;

public abstract class AbstractReceiver {
    public static int receiver1 = 1;
    public static int receiver2 = 2;
    public static int receiver3 = 3;

    protected int receiverIndex;

    protected AbstractReceiver nextRecevier;

    public void setNextRecevier(AbstractReceiver nextRecevier) {
        this.nextRecevier = nextRecevier;
    }

    /**
     * 控制恰當鏈中的某一環(huán)來處理。
     * @param inputIndex
     */
    protected void chainElementInput(int inputIndex) {
        if (inputIndex <= this.receiverIndex) {
            printInformation(this.receiverIndex);
            return;
        } else {
            this.nextRecevier.chainElementInput(inputIndex);
        }
    }

    abstract public void printInformation(int receiverIndex);
}

接收者1

package com.company;

public class Receiver1 extends AbstractReceiver {
    public Receiver1(int index) {
        this.receiverIndex = index;
    }

    @Override
    public void printInformation(int receiverIndex) {
        System.out.println(this.getClass().getName());
    }
}

接收者2

package com.company;

public class Receiver2 extends AbstractReceiver {
    public Receiver2(int index) {
        this.receiverIndex = index;
    }

    @Override
    public void printInformation(int receiverIndex) {
        System.out.println(this.getClass().getName());
    }
}

接收者3

package com.company;

public class Receiver3 extends AbstractReceiver {
    public Receiver3(int index) {
        this.receiverIndex = index;
    }

    @Override
    public void printInformation(int receiverIndex) {
        System.out.println(this.getClass().getName());
    }
}

多謝捧場

如果您覺得我的文章有價值,那么賞臉打賞一個,鄙人感激不盡。不過,不打賞看看也是好的,如果有不對的地方,還請您多多指正。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容