💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
> **设计模式-责任链模式** ## 说明 ## **责任链模式( Chain of Responsibility Pattern): 为请求创建了一个接收者对象的链,并沿这条链传递该请求,直到有对象处理它为止。这种模式能够给予请求的类型,对请求的发送者和接收者进行解耦。** ---------- ##模式说明## <h5>要解决的问题</h5> > 1.当不确定该使用某个处理对象时,可动态指定一组对象来进行业务处理。 > 2.当需要进行任务层级递交处理时,可以进行上级关联,进行业务递交申请。 <h5>适用的场景</h5> > 1.流程审批 > 2.拦截器处理 > 3.日志系统搭建 > 4.laravel中间件 ##示例代码## /** * 责任链模式( Chain of Responsibility Pattern) * 为请求创建了一个接收者对象的链,并沿这条链传递该请求,直到有对象处理它为止。这种模式能够给予请求的类型,对请求的发送者和接收者进行解耦。 */ header('Content-Type: text/plain'); //定义错误级别类,对不同的犯错界别给与同的处理 class Info{ protected $levelNum=1; protected $next='Warning'; public function process($level){ if($level <= $this->levelNum ){ echo "等级{$level}级别给予提示说明".PHP_EOL; }else{ $objUp= new $this->next; $objUp->process($level); } } } class Warning{ protected $levelNum=2; protected $next='Error1'; public function process($level){ if($level <= $this->levelNum ){ echo "等级{$level}的错误给予口头警告".PHP_EOL; }else{ $objUp= new $this->next; $objUp->process($level); } } } class Error1{ protected $levelNum=3; public function process($level){ if($level <= $this->levelNum ){ echo "等级{$level}级别的错误给予制裁".PHP_EOL; }else{ throw new Exception("最后一个级别必须处理,没有处理,程序有问题"); } } } $leave=1; $obj= new Info(); $obj->process($leave); $leave=2; $obj->process($leave); $leave=3; $obj->process($leave); ---------- 结果: 等级1级别给予提示说明 等级2的错误给予口头警告 等级3级别的错误给予制裁 ##责任链模式的其他问题## 一是性能问题,每个请求都是从链头遍历到链尾,特别是在链比较长的时候,性能是一个问题。二是调试不是很方便,特别是链条比较长的,环节比较多的时候,由于采用了类似递归的方式 ,调试的时候逻辑可能比较复杂。 ## 结尾 ## <p style="background-image: -webkit-linear-gradient(left, #3498db, #f47920 10%, #d71345 20%, #f7acbc 30%,#ffd400 40%, #3498db 50%, #f47920 60%, #d71345 70%, #f7acbc 80%, #ffd400 90%, #3498db);color: transparent;-webkit-text-fill-color: transparent;-webkit-background-clip: text;text-align:center;"> 心如花木,向阳而生。 </p> [1]: https://blog.zxliu.cn/usr/uploads/2020/11/2353528746.png [2]: https://blog.zxliu.cn/usr/uploads/2020/11/1966401635.png