原文地址:http://te-amo.site/user/article/info/ARTICLE20180509060141975
文章中部分定義和解釋性文字,都是引用百度百科,主要的代碼及場景應用爲本人原創
責任鏈模式,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈,請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。
場景:公司常見的事情——簽字,一個待批准的任務,由管理者一層一層的批准
結構
- 抽象處理者(Handler)角色:定義出一個處理請求的接口,接口中定義有對下家的引用。
- 具體處理者(ConcreteHandler)角色:具體處理者接到請求後,可以選擇將請求處理掉,或者將請求傳給下家。
設計
實現
代碼地址:https://github.com/telundusiji/designpattern
抽象處理者
@Data
public abstract class Handler {
private Handler handler;
public abstract boolean handleRequest(String task);
}
具體處理者 小組長
@Slf4j
public class TeamLeader extends Handler{
@Override
public boolean handleRequest(String task) {
if("task".equals(task)){
log.info("組長批准{}",task);
return getHandler().handleRequest(task);
}
log.info("組長駁回{}請求",task);
return false;
}
}
具體處理者 部門長
@Slf4j
public class HeadOfDepartment extends Handler {
@Override
public boolean handleRequest(String task) {
if("task".equals(task)){
log.info("部門長批准{}",task);
return getHandler().handleRequest(task);
}
log.info("部門長駁回{}請求",task);
return false;
}
}
具體處理者 技術總監
@Slf4j
public class CTO extends Handler {
@Override
public boolean handleRequest(String task) {
if("task".equals(task)){
log.info("CTO批准{}",task);
return true;
}
log.info("CTO駁回{}請求",task);
return false;
}
}
經典應用
Filter(過濾器)就是一個經典的責任鏈模式
- 抽象處理者:Filter
- 具體處理者:實現Filter的類