責(zé)任鏈模式
模型圖

模型圖(來(lái)源wikipedia)
定義
它包含了一些命令對(duì)象和一系列的處理對(duì)象。每一個(gè)處理對(duì)象決定它能處理哪些命令對(duì)象,它也知道如何將它不能處理的命令對(duì)象傳遞給該鏈中的下一個(gè)處理對(duì)象。該模式還描述了往該處理鏈的末尾添加新的處理對(duì)象的方法
解釋
- Handler 是抽象處理者
代碼:
public abstract class Handler {
//責(zé)任傳遞,下一任責(zé)任人
private Handler nextHandler;
public final Response handleMessage(Request request){
Response response = null;
if (Objects.equals(this.getHandlerLevel(),request.getRequestLevel())){
response = this.echo(request);
}else {
if (Objects.nonNull(nextHandler)){//如果有后續(xù)人,繼續(xù)執(zhí)行
response = this.nextHandler.handleMessage(request);
}else {
System.out.println("沒(méi)有責(zé)任人了");
}
}
return response;
}
public void setNext(Handler handler){
this.nextHandler = handler;
}
/**
* 每個(gè)處理者都有一個(gè)級(jí)別
* @return
*/
protected abstract Level getHandlerLevel();
/**
* 每個(gè)處理者都要實(shí)現(xiàn)處理任務(wù)
* @param request
*/
protected abstract Response echo(Request request);
}
抽象的處理者實(shí)現(xiàn)三個(gè)指責(zé):
- 定義一個(gè)請(qǐng)求處理的方法handleMessage(),
唯一對(duì)外開(kāi)放;- 定義一個(gè)鏈的編排方法hasNext方法,設(shè)置下一個(gè)執(zhí)行者;
- 定義實(shí)現(xiàn)具體類(lèi)需要實(shí)現(xiàn)的方法
優(yōu)點(diǎn)
很明顯的會(huì)將請(qǐng)求和處理分開(kāi),解耦
缺點(diǎn)
性能問(wèn)題:每一個(gè)請(qǐng)求都得從頭開(kāi)始