2.14. 责任链模式

未匹配的标注

定义

一个对象无法处理命令,调用下一个对象来进行处理,直到找到可以处理的对象。

每个具体者应当有

  1. 当前级别的标识
  2. 当前级别的调用方法
  3. 上级的 具体者 (如果当前级别无法处理,则调用上级具体者处理)

任务 [防御系统]

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);

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~