成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

libxd / 1125人閱讀

摘要:責(zé)任鏈模式涉及到的角色如下所示抽象處理者角色定義一個(gè)處理請(qǐng)求的抽象類。如果一個(gè)類承擔(dān)了一部分責(zé)任,還將請(qǐng)求踢給下一個(gè)皮球,則被稱為不純的責(zé)任鏈模式。一般來說,日常開發(fā)中不純的責(zé)任鏈模式用的比較多一點(diǎn)。參考責(zé)任鏈模式更多文章

在閻宏博士的《JAVA與模式》一書中開頭是這樣描述責(zé)任鏈(Chain of Responsibility)模式的:

責(zé)任鏈模式是一種對(duì)象的行為模式。在責(zé)任鏈模式里,很多對(duì)象由每一個(gè)對(duì)象對(duì)其下家的引用而連接起來形成一條鏈。請(qǐng)求在這個(gè)鏈上傳遞,直到鏈上的某一個(gè)對(duì)象決定處理此請(qǐng)求。發(fā)出這個(gè)請(qǐng)求的客戶端并不知道鏈上的哪一個(gè)對(duì)象最終處理這個(gè)請(qǐng)求,這使得系統(tǒng)可以在不影響客戶端的情況下動(dòng)態(tài)地重新組織和分配責(zé)任。

責(zé)任鏈模式涉及到的角色如下所示:

抽象處理者(Handler)角色:定義一個(gè)處理請(qǐng)求的抽象類。如果需要,可以定義一個(gè)方法以設(shè)定和返回對(duì)下家的引用。

具體處理者(ConcreteHandler)角色:具體處理者接到請(qǐng)求后,可以選擇將請(qǐng)求處理掉,或者將請(qǐng)求傳給下家。由于具體處理者持有對(duì)下家的引用,因此,如果需要,具體處理者可以訪問下家。

舉一個(gè)簡單的例子,部門辦活動(dòng)需要報(bào)銷。報(bào)銷處職員可以處理單次500元以下的業(yè)務(wù),超過500需要和處長聯(lián)系。而處長只能處理單次1000元一下的業(yè)務(wù),再高就只能找老大報(bào)了。但是老大目前只能處理單次1500元以下的業(yè)務(wù),再高目前只能拒絕報(bào)銷了。
這個(gè)例子的具體實(shí)現(xiàn)為:

抽象類Handler

public abstract class Handler {
    protected Handler nextHandler = null;
 
    public Handler getNextHandler() {
        return nextHandler;
    }
 
    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }
     
    public abstract String dispose(String user , double fee);
}

職員類:

public class StaffMember extends Handler {
    @Override
    public String dispose(String user, double fee) {
        if(fee < 500){
            System.out.println("職員 給了 "+user+" "+fee+"元");
        }else if (super.getNextHandler() == null){
            System.out.println("誰都處理不了 "+user+" 要 "+fee+"元的事情");
        }else {
            super.getNextHandler().dispose(user,fee);
        }
        return null;
    }
}

處長類:

public class SectionChief extends Handler {
    @Override
    public String dispose(String user, double fee) {
        if(fee < 1000){
            System.out.println("小主管 給了 "+user+" "+fee+"元");
        }else if (super.getNextHandler() == null){
            System.out.println("誰都處理不了 "+user+" 要 "+fee+"元的事情");
        }else {
            super.getNextHandler().dispose(user,fee);
        }
        return null;
    }
}

老大類:

public class Director extends Handler {
    @Override
    public String dispose(String user, double fee) {
        if(fee < 5000){
            System.out.println("老大 給了 "+user+" "+fee+"元");
        }else if (super.getNextHandler() == null){
            System.out.println("誰都處理不了 "+user+" 要 "+fee+"元的事情");
        }else {
            super.getNextHandler().dispose(user,fee);
        }
        return null;
    }
}

Main方法:

public class Main {
    public static void main(String[] args){
        StaffMember staffMember = new StaffMember();
        SectionChief sectionChief = new SectionChief();
        Director director = new Director();
 
        //set Handler
        staffMember.setNextHandler(sectionChief);
        sectionChief.setNextHandler(director);
 
        staffMember.dispose("小王",400);
        staffMember.dispose("小混混",800);
        staffMember.dispose("老李",1200);
 
        staffMember.dispose("小明",10000);
    }
}

最后的結(jié)果就是:

純責(zé)任鏈模式和不純的責(zé)任鏈模式
如果一個(gè)類要么承擔(dān)責(zé)任處理請(qǐng)求要么將請(qǐng)求踢給下一個(gè)皮球,則被稱為純責(zé)任鏈模式。
如果一個(gè)類承擔(dān)了一部分責(zé)任,還將請(qǐng)求踢給下一個(gè)皮球,則被稱為不純的責(zé)任鏈模式。

一般來說,日常開發(fā)中不純的責(zé)任鏈模式用的比較多一點(diǎn)。

參考:
java責(zé)任鏈模式

更多文章:http://blog.gavinzh.com

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65554.html

相關(guān)文章

  • Java設(shè)計(jì)模式職責(zé)模式

    摘要:簡介職責(zé)鏈模式有時(shí)候也叫責(zé)任鏈模式,它是一種對(duì)象行為的設(shè)計(jì)模式。中的就是使用了責(zé)任鏈模式。純的責(zé)任鏈模式的實(shí)際例子很難找到,一般看到的例子均是不純的責(zé)任鏈模式的實(shí)現(xiàn)。如果堅(jiān)持責(zé)任鏈不純便不是責(zé)任鏈模式,那么責(zé)任鏈模式便不會(huì)有太大意義了。 Java設(shè)計(jì)模式之職責(zé)鏈模式 前幾天復(fù)習(xí)java的異常處理時(shí),接觸到了責(zé)任鏈模式。在企業(yè)級(jí)應(yīng)用中,從前臺(tái)發(fā)過來的請(qǐng)求在后臺(tái)拋出異常,異常處理的設(shè)計(jì)一般...

    bergwhite 評(píng)論0 收藏0
  • Java設(shè)計(jì)模式綜合運(yùn)用(責(zé)任模式進(jìn)階)

    摘要:責(zé)任鏈模式的具體運(yùn)用以及原理請(qǐng)參見筆者責(zé)任鏈模式改進(jìn)方式引入適配器模式關(guān)于接口適配器模式原理以及使用場(chǎng)景請(qǐng)參見筆者適配器模式。 1 責(zé)任鏈模式現(xiàn)存缺點(diǎn) 由于責(zé)任鏈大多數(shù)都是不純的情況,本案例中,只要校驗(yàn)失敗就直接返回,不繼續(xù)處理接下去責(zé)任鏈中的其他校驗(yàn)邏輯了,故而出現(xiàn)如果某個(gè)部分邏輯是要由多個(gè)校驗(yàn)器組成一個(gè)整理的校驗(yàn)邏輯的話,則此責(zé)任鏈模式則顯現(xiàn)出了它的不足之處了。(責(zé)任鏈模式的具體運(yùn)...

    suosuopuo 評(píng)論0 收藏0
  • 不得不知的責(zé)任設(shè)計(jì)模式

    世界上最遙遠(yuǎn)的距離,不是生與死,而是它從你的世界路過無數(shù)次,你卻選擇視而不見,你無情,你冷酷啊...... showImg(https://segmentfault.com/img/remote/1460000019550563); 被你忽略的就是責(zé)任鏈設(shè)計(jì)模式,希望它再次經(jīng)過你身旁你會(huì)猛的發(fā)現(xiàn),并對(duì)它微微一笑...... 責(zé)任鏈設(shè)計(jì)模式介紹 抽象介紹 初次見面,了解表象,深入交流之后(看完文中的...

    raise_yang 評(píng)論0 收藏0
  • 忘了再看設(shè)計(jì)模式-行為型

    摘要:推文用設(shè)計(jì)模式解構(gòu)三國是一種什么體驗(yàn)行為型設(shè)計(jì)模式一策略模式工廠模式優(yōu)化結(jié)構(gòu)狀態(tài)模式隨著狀態(tài)改變而改變行為。推文狀態(tài)機(jī)與狀態(tài)模式責(zé)任鏈模式多個(gè)對(duì)象依次處理請(qǐng)求前者指定后者。代理模式代理針對(duì)一個(gè)對(duì)象,為了增加控制等中介雙方都是多個(gè),為了解耦。 策略模式 選擇使用封裝好的一系列算法,可相互替換。 類比:商店[Context]買完衣服買單[Stratege](現(xiàn)金[Concrete Stra...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<