该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP
今天来谈谈责任链模式,乍一听责任链模式好像很高级的一样,但是相信我,其实每位天朝的同学都十分熟悉这个模式,责任链模式,就好像中国的官场制度一样,每一个级别的权利都区分的很细,举个生活中的栗子:
村委不能越级去替镇委办事情,如果村委无法解决,只能向上求助镇委
镇委不能越级去替市委办事情,如果镇委无法解决,只能向上求助市委
市委不能越级去替省委办事情,如果市委无法解决,只能向上求助省委
副领导不能越级去替正领导办事情,如果副领导无法解决,只能向上求助正领导
….
…
直到找到合适的~ 镇委(未解决)-> 市委(未解决)->省委(解决)->中央(老大不需要出马,因为前面已经由小弟解决了~)
对的,就是这样,每个级别有自己职责,如果自己没有权限解决这个问题,只能一层一层往上找,直到有一个合适的人出现然后解决问题。
编程中的使用场景:
在一个论坛中,如果一个人的帖子被人举报了,那么这个帖子就会进入管理员的删帖界面,那么进入哪个管理员的删帖界面呢?这个时候就用到责任链模式了,把这个帖子给权限最低的管理员,如果这个管理员无法处理,那么就一层一层往上找,直到找到一个人有权利删帖了,该流程才算结束。
接下来请看具体代码:
观察者模式.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 :"市委解决";
?>
其实很简单,就是在当前类中定义好自己的上级名字,遇到自己解决不了的问题,就直接实例化调用上级,让它来处理。图示:
该文章属于《编程中的那些经典套路——设计模式汇总》系列
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。