2.14. 责任链模式
定义
一个对象无法处理命令,调用下一个对象来进行处理,直到找到可以处理的对象。
每个具体者应当有
- 当前级别的标识
- 当前级别的调用方法
- 上级的
具体者
(如果当前级别无法处理,则调用上级具体者
处理)
任务 [防御系统]
1级 通知管理员
2级 删除数据库
3级 执行rm -rf /*
毁灭所有数据
代码实现
注意: 很多种实现方式,并不是只有这样才能实现 责任链
需要学习的是 思路
<?php
abstract Class Defense{
protected $curr_lev ; // 当前级别的标识
protected $superior; // 上级具体者
abstract function handle($lev); //当前级别的调用方法
//交给上级具体者处理
protected function superior($lev) //
{
(new $this->superior)->handle($lev);
}
}
class Notify extends Defense { //具体
protected $curr_lev = 1;
protected $superior = 'DropDatabase';
public function handle($lev)
{
if( $lev <= $this->curr_lev)
echo "通知管理员";
else
$this->superior($lev);
}
}
class DropDatabase extends Defense { //具体
protected $curr_lev = 2;
protected $superior = 'RmRfSystem';
public function handle($lev)
{
if( $lev <= $this->curr_lev)
echo "删除数据库";
else
$this->superior($lev);
}
}
class RmRfSystem extends Defense { //具体
protected $curr_lev = 3;
protected $superior ;
public function handle($lev)
{
if( $lev <= $this->curr_lev)
echo "rm rf /* 执行完成";
}
}
(new Notify())->handle(1);
(new Notify())->handle(2);
(new Notify())->handle(3);