概念:
责任链模式又叫做职责链模式,是属于行为型的一种。
责任链模式分为两种:
第一种像工厂流水线,目的就让每一个环节都进行处理。
第二种像层层审批,如果其中一个对象无法处理,调用下一个对象来进行处理,如果一旦能处理,链式就此停止,以此类推,第二种为了程序的健壮性,至少得需要一个兜底的模块,防止穿透责任链。
适用场景:
对请求参数进行逐层过滤,用于框架的中间件的开发场景(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);