設(shè)計模式-責任鏈模式

/**
 * 責任鏈模式
 * 責任鏈(Chain of Responsibility)模式的定義:為了避免請求發(fā)送者與多個請求處理者耦合在一起及穗,于是將所有請求的處理者通過前一對象記住其下一個對象的引用而連成一條鏈蜕径;
 * 當有請求發(fā)生時静暂,可將請求沿著這條鏈傳遞,直到有對象處理它為止秆剪。
 * <p>
 * 注意:責任鏈模式也叫職責鏈模式妈嘹。
 * <p>
 * 在責任鏈模式中成黄,客戶只需要將請求發(fā)送到責任鏈上即可缚态,無須關(guān)心請求的處理細節(jié)和請求的傳遞過程,請求會自動進行傳遞趟章。
 * 所以責任鏈將請求的發(fā)送者和請求的處理者解耦了杏糙。
 * <p>
 * 責任鏈模式是一種對象行為型模式
 * <p>
 * 優(yōu)點
 * 1.降低了對象之間的耦合度。該模式使得一個對象無須知道到底是哪一個對象處理其請求以及鏈的結(jié)構(gòu)蚓土,發(fā)送者和接收者也無須擁有對方的明確信息宏侍。
 * 2.增強了系統(tǒng)的可擴展性∈衿幔可以根據(jù)需要增加新的請求處理類谅河,滿足開閉原則。
 * 3.增強了給對象指派職責的靈活性。當工作流程發(fā)生變化绷耍,可以動態(tài)地改變鏈內(nèi)的成員或者調(diào)動它們的次序吐限,也可動態(tài)地新增或者刪除責任。
 * 4.責任鏈簡化了對象之間的連接褂始。每個對象只需保持一個指向其后繼者的引用诸典,不需保持其他所有處理者的引用,這避免了使用眾多的 if 或者 if···else 語句崎苗。
 * 5.責任分擔狐粱。每個類只需要處理自己該處理的工作,不該處理的傳遞給下一個對象完成胆数,明確各類的責任范圍肌蜻,符合類的單一職責原則。
 * <p>
 * 缺點
 * 1.不能保證每個請求一定被處理必尼。由于一個請求沒有明確的接收者蒋搜,所以不能保證它一定會被處理,該請求可能一直傳到鏈的末端都得不到處理判莉。
 * 2.對比較長的職責鏈豆挽,請求的處理可能涉及多個處理對象,系統(tǒng)性能將受到一定影響骂租。
 * 3.職責鏈建立的合理性要靠客戶端來保證祷杈,增加了客戶端的復(fù)雜性斑司,可能會由于職責鏈的錯誤設(shè)置而導(dǎo)致系統(tǒng)出錯渗饮,如可能會造成循環(huán)調(diào)用。
 * <p>
 * android應(yīng)用:Okhttp攔截器
 */
public class ChainTest {

    public static void main(String[] args) {
        ApprovalChain approvalChain = new ApprovalChain();
        approvalChain.addChain(new LeaderChain());
        approvalChain.addChain(new HrChain());
        approvalChain.addChain(new BossChain());

        approvalChain.handleRequest(1);
        approvalChain.handleRequest(10);
        approvalChain.handleRequest(15);
        approvalChain.handleRequest(20);
    }

}
/**
 * 責任鏈接口
 */
abstract class Chain {

    protected Chain next;

    abstract void handleRequest(int days);

}
/**
 * 模擬請假審批流程責任鏈
 */
public class ApprovalChain extends Chain {

    /**
     * 添加到責任鏈末尾
     */
    void addChain(Chain chain) {
        if (next == null) {
            next = chain;
            return;
        }
        Chain pre = next;
        while (pre.next != null) {
            pre = pre.next;
        }
        pre.next = chain;
    }

    @Override
    void handleRequest(int days) {
        next.handleRequest(days);
    }
}
/**
 * 領(lǐng)導(dǎo)審批
 */
public class LeaderChain extends Chain {

    @Override
    void handleRequest(int days) {
        if (days <= 3) {
            System.out.println("領(lǐng)導(dǎo)審批通過");
        } else if (next != null) {
            next.handleRequest(days);
        } else {
            System.out.println("審批不通過");
        }
    }
}
/**
 * hr審批
 */
public class HrChain extends Chain {

    @Override
    void handleRequest(int days) {
        if (days <= 10) {
            System.out.println("hr審批通過");
        } else if (next != null) {
            next.handleRequest(days);
        } else {
            System.out.println("審批不通過");
        }
    }
}
/**
 * 老板審批
 */
public class BossChain extends Chain {

    @Override
    void handleRequest(int days) {
        if (days <= 15) {
            System.out.println("老板審批通過");
        } else if (next != null) {
            next.handleRequest(days);
        } else {
            System.out.println("審批不通過");
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宿刮,一起剝皮案震驚了整個濱河市互站,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌僵缺,老刑警劉巖胡桃,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異磕潮,居然都是意外死亡翠胰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門自脯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來之景,“玉大人,你說我怎么就攤上這事膏潮《凸罚” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長轻纪。 經(jīng)常有香客問我油额,道長,這世上最難降的妖魔是什么刻帚? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任潦嘶,我火速辦了婚禮,結(jié)果婚禮上崇众,老公的妹妹穿的比我還像新娘衬以。我一直安慰自己,他們只是感情好校摩,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布看峻。 她就那樣靜靜地躺著,像睡著了一般衙吩。 火紅的嫁衣襯著肌膚如雪互妓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天坤塞,我揣著相機與錄音冯勉,去河邊找鬼。 笑死摹芙,一個胖子當著我的面吹牛灼狰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浮禾,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼交胚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盈电?” 一聲冷哼從身側(cè)響起蝴簇,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匆帚,沒想到半個月后熬词,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡吸重,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年互拾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嚎幸。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡颜矿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鞭铆,到底是詐尸還是另有隱情或衡,我是刑警寧澤焦影,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站封断,受9級特大地震影響斯辰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坡疼,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一彬呻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柄瑰,春花似錦闸氮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至授翻,卻和暖如春或悲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背堪唐。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工巡语, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淮菠。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓男公,卻偏偏與公主長得像,于是被迫代替她去往敵國和親合陵。 傳聞我的和親對象是個殘疾皇子枢赔,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容