設計模式:責任鏈模式
什么是責任鏈模式?
責任鏈模式(英文:Chain of Responsibility Pattern),它包含了一些命令對象和一系列的處理對象。每一個處理對象決定它能處理哪些命令對象,它也知道如何將它不能處理的命令對象傳遞給該鏈中的下一個處理對象。該模式還描述了往該處理鏈的末尾添加新的處理對象的方法。

一句話歸納
各人自掃門前雪,莫管他們瓦上霜
代碼示例
我們在平時難免會因為各種各樣的原因向自己所在的公司提出請假,就像我工作地點和老家離得非常遙遠,回去的路上就要耽擱兩天,所以每年過年的時候都會向公司多請幾天假回家過年;但公司有請假的規(guī)定,請假一天需要跟項目經(jīng)理申請,請假兩天需要跟項目總監(jiān)申請,請假超過三天需要跟CEO申請,大家在各自的公司請假是否跟我一樣呢?可以在下方評論區(qū)暢所欲言。

適用性
以下我建議你考慮使用:
降低耦合度,把請求和處理分開;
有多個可以處理同一個請求,具體由哪個來處理請求在自行確定;
可以自由地添加一個新的處理者,比如在上面的示例中我想在添加一個CTO;
在不明確究竟是哪個處理者來處理時,向所有的處理者發(fā)送同一個請求;
現(xiàn)實中比如請假流程審批,采購流程審批、網(wǎng)關的設計等等都可以用責任鏈設計。
局限性
以下我建議你謹慎使用:
不能保證請求一定會被處理;
因為每一個請求都要從鏈頭到鏈尾,所以性能會有一定的影響,所以要謹慎考慮鏈的長度;
調(diào)試比較麻煩,由于采用類似遞歸的方式,如果鏈比較長,調(diào)試就比較麻煩。
由于責任鏈的建立需要客戶端來保證合理性,如果責任鏈每一個處理者錯誤設置,可能會出現(xiàn)循環(huán)調(diào)用的問題。

寫在最后
好兄弟可以點贊并關注我的公眾號“javaAnswer”,全部都是干貨。

標簽: