编程中的那些套路——关于责任链模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,而且如下内容基于语言PHPphp

今天来谈谈责任链模式,乍一听责任链模式好像很高级的同样,可是相信我,其实每位天朝的同窗都十分熟悉这个模式,责任链模式,就好像中国的官场制度同样,每个级别的权利都区分的很细,举个生活中的栗子:编程

村委不能越级去替镇委办事情,若是村委没法解决,只能向上求助镇委设计模式

镇委不能越级去替市委办事情,若是镇委没法解决,只能向上求助市委this

市委不能越级去替省委办事情,若是市委没法解决,只能向上求助省委spa

副领导不能越级去替正领导办事情,若是副领导没法解决,只能向上求助正领导设计

….code

blog

直到找到合适的~ 镇委(未解决)-> 市委(未解决)->省委(解决)->中央(老大不须要出马,由于前面已经由小弟解决了~)事件

对的,就是这样,每一个级别有本身职责,若是本身没有权限解决这个问题,只能一层一层往上找,直到有一个合适的人出现而后解决问题。图片

编程中的使用场景:

在一个论坛中,若是一我的的帖子被人举报了,那么这个帖子就会进入管理员的删帖界面,那么进入哪一个管理员的删帖界面呢?这个时候就用到责任链模式了,把这个帖子给权限最低的管理员,若是这个管理员没法处理,那么就一层一层往上找,直到找到一我的有权利删帖了,该流程才算结束。

接下来请看具体代码:

观察者模式.php

<?php
 
abstract class Duty {
 
    protected $higher=null;
 
     public abstract function operation($lev);
 
}
 
//一级官
 
class Lev1 extends duty{
 
    protected $higher = 'lev2';
 
    public function operation($lev){
 
        if ($lev <= 1) {
 
            echo'村委解决';
 
        }else{
 
            $higher = new $this->higher;
 
            $higher->operation($lev);
 
        }
 
    }
 
}
 
//二级官
 
class Lev2 extends duty{
 
    protected $higher = 'lev3';
 
    public function operation($lev){
 
        if ($lev <= 2) {
 
            echo'镇委解决';
 
        }else{
 
            $higher = new $this->higher;
 
            $higher->operation($lev);
 
        }
 
    }
 
}
 
class Lev3{
 
    protected $higher = 'lev4';
 
    public function operation($lev){
 
        if ($lev <= 3) {
 
            echo'市委解决';
 
        }else{
 
            $higher = new $this->higher;
 
            $higher->operation($lev);
 
        }
 
        }
 
}
 
class Lev4{
 
    protected $higher = null; //没有比中央更大的了,因此能够不用判断直接解决
 
    public function operation($lev){
 
            echo '中央解决';
 
        }
 
}
 
$question = new Lev1();//从最低级的开始尝试
 
$question->operation(3);//事件等级为3,因此到市委才能解决
 
//output :"市委解决";
 
?>

其实很简单,就是在当前类中定义好本身的上级名字,遇到本身解决不了的问题,就直接实例化调用上级,让它来处理。图示:
图片描述

该文章属于《编程中的那些经典套路——设计模式汇总》系列

相关文章
相关标签/搜索