職責(zé)鏈模式定義
避免將窮求發(fā)送者與接受者耦合在一起刺啦,讓多個(gè)對象都有機(jī)會(huì)接受請求竣贪,將這些對象鏈接成一條鏈研叫,平切沿著這條鏈傳遞請求,直到有對象處理它為止关面,職責(zé)鏈模式是一種對象行為型模式
職責(zé)鏈模式結(jié)構(gòu)圖
職責(zé)鏈模式主要優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1.職責(zé)鏈模式使得一個(gè)對象無須知道是其他哪一個(gè)對象處理其請求坦袍,對象僅需要知道該窮求會(huì)被處理即可,接受者和發(fā)送者都沒有對方的明確信息等太,且鏈中的對象不需要知道鏈的結(jié)構(gòu)捂齐,由客戶端負(fù)責(zé)鏈的耦合度。
2.請求處理對象僅需要維持一個(gè)指向其后繼者的引用缩抡,而不需要維持它對所有的候選處理著的引用奠宜,可簡化對象的相互連接。
3.在給對象分配職責(zé)時(shí)缝其,責(zé)任鏈可以提供更多靈活性挎塌,可以通過在運(yùn)行時(shí)對鏈進(jìn)行動(dòng)態(tài)的增加或修改來增加處理改變處理一個(gè)請求的職責(zé)徘六。
4.在系統(tǒng)中增加一個(gè)新的具體請求處理者時(shí)内边,無須修改原有系統(tǒng)的代碼,只需要在客戶端重新建鏈即可待锈,從這一點(diǎn)來看是符合開閉原則的漠其。
缺點(diǎn):
1.由于一個(gè)請求沒有明確的接受者,那么就不能保證它一定會(huì)處理竿音,改請求可能一直到鏈的末端都得不到處理和屎;一個(gè)請求也可能因?yàn)樨?zé)任鏈沒有被正確配置而得不到處理。
2.對于比較長的責(zé)任鏈春瞬,請求的處理可能涉及多個(gè)處理對象柴信,系統(tǒng)性能將受到一定印象,而且進(jìn)行代碼調(diào)整時(shí)不太方便宽气。
3.如果建鏈不當(dāng)随常,可能會(huì)造成循環(huán)調(diào)用,導(dǎo)致系統(tǒng)陷入死循環(huán)萄涯。
職責(zé)鏈模式適用場景
1.有多個(gè)對象可以處理同一個(gè)請求绪氛,具體哪個(gè)請求處理對象該請求帶運(yùn)行時(shí)刻再確定,客戶端只需要將請求提交到鏈上涝影,而無須關(guān)心請求的處理對象是誰枣察,以及是如何處理的。
2,在不明確制定接受者的情況下序目,想多個(gè)對象中的一個(gè)提交一個(gè)請求臂痕。
3,可動(dòng)態(tài)制定一組對象處理請求宛琅】绦罚客戶端可以動(dòng)態(tài)創(chuàng)建責(zé)任鏈來處理窮求,還可以改變鏈中處理者之間的先后循序嘿辟。