概念: 責任鏈模式又叫做職責鏈模式,是屬於行為型的一種。 責任鏈模式分為兩種: 第一種像工廠流水線,目的就讓每一個環節都進行處理。 第二種像層層審批,如果其中一個對象無法處理,調用下一個對象來進行處理,如果一旦能處理,鏈式就此停止,以此類推,第二種為了程式的健壯性,至少得需要一個兜底的模塊,防止穿透 ...
概念:
責任鏈模式又叫做職責鏈模式,是屬於行為型的一種。
責任鏈模式分為兩種:
第一種像工廠流水線,目的就讓每一個環節都進行處理。
第二種像層層審批,如果其中一個對象無法處理,調用下一個對象來進行處理,如果一旦能處理,鏈式就此停止,以此類推,第二種為了程式的健壯性,至少得需要一個兜底的模塊,防止穿透責任鏈。
適用場景:
對請求參數進行逐層過濾,用於框架的中間件的開發場景(Laravel Middleware)。日誌框架,每個鏈元素自主決定如何處理日誌消息。
優點:
簡化了調用端的操作,調用端無須關心請求的處理細節和請求的傳遞過程,因為請求會自動進行傳遞到整條鏈路。
缺點:
期間實例化的很多的對象,其實完全可以用普通的if去替代。
調試不方便。
//責任鏈模式好像沒有固定的實現方案,只是一種思想,所以實現一個展示活躍類型的的功能。這種方式方便調用端處理,但是依賴在類的內部,不利於後期維護。
//也可以優化調用和實例化在類的外部進行,缺點是會增加調用端的複雜度,有點是可控度更高。到底如何實現這要看應用場景,但是鏈式的思想是一致的。
class shortTerm {
private function next($time) {
return (new OneDay())->show($time);
}
public function show($time) {
if($time <= 3) {
return '剛剛活躍';
}
return $this->next($time);
}
}
class OneDay {
private function next($time) {
return (new ThreeDay())->show($time);
}
public function show($time) {
if($time <= 24) {
return '當天活躍';
}
return $this->next($time);
}
}
class ThreeDay {
private function next($time) {
return (new SevenDay())->show($time);
}
public function show($time) {
if($time <= 72) {
return '三日內活躍';
}
return $this->next($time);
}
}
class SevenDay {
public function show($time) {
return '不活躍';
}
}
//調用端
echo (new shortTerm())->show(600);