-
抽象類 handler
- level 屬性: 當(dāng)前handler能夠處理的責(zé)任級別
- 構(gòu)造方法(level)
- nextHandler:責(zé)任鏈的下一個(gè)節(jié)點(diǎn)吧寺,還有setter
- final方法 HandlerMessage(Request):這是handler的公共邏輯,負(fù)責(zé)判斷當(dāng)前請求的level能否處理萤衰,如果不能處理傳遞給下一個(gè)handler改鲫。唯一對外公開的方法臂容。
- abstract方法 response(Request) :處理請求
-
handlerImplement
- 實(shí)現(xiàn)response方法哩治,定義該角色的職能猿规。
- 構(gòu)造方法定義該角色能夠處理的任務(wù)level
-
請求接口 RequestInterface
- getLevel:返回任務(wù)的level
- getRequest:返回任務(wù)的請求信息
requests = new List(new request1(), new request2(), new request3());
handler1 = new HandlerImplement1();
handler2 = new HandlerImplement2();
handler3 = new HandlerImplement3();
handler1.setNext(handler2);
handler2.setNext(handler3);
for (request : requests) {
handler1.HandleMessage(request); // 統(tǒng)一由責(zé)任鏈的第一個(gè)節(jié)點(diǎn)開始驅(qū)動
}
總結(jié)
優(yōu)點(diǎn)
- 請求方不用知道整個(gè)處理鏈的全貌芬萍,只管調(diào)用第一個(gè)節(jié)點(diǎn)尤揣。擴(kuò)展責(zé)任鏈節(jié)點(diǎn)也不會影響請求方。
缺點(diǎn)
- 請求鏈過長可能會造成性能問題担忧。一般在Handler里設(shè)置最大節(jié)點(diǎn)數(shù)量屬性芹缔,setNextHandler的時(shí)候判斷是否超過該值坯癣,避免出現(xiàn)超長鏈瓶盛。