该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言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 :"市委解决";

?>

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

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

责任链模式 php,编程中的那些套路——关于责任链模式相关推荐

  1. python编程模式_Python编程中的反模式

    原标题:Python编程中的反模式 这篇文章收集了我在Python新手开发者写的代码中所见到的不规范但偶尔又很微妙的问题. 本文的目的是为了帮助那些新手开发者渡过写出丑陋的Python代码的阶段. 对 ...

  2. mave工程中的一个类调用另一个聚合工程的一个类_谈谈设计模式:建造者模式在jdk中的体现,它和工厂模式区别?...

    背景 建造模式(Builder模式) 假如有一个需求:盖房子,盖房子过程是一致的:打桩.砌墙.封顶.但是房子是各式各样的,最后盖出来的房子可能是高楼或别墅. 根据直接的思路,不用设计模式思想,我们也许 ...

  3. apache php 工作模式,PHP Apache中两种工作方式区别(CGI模式、Apache 模块DLL)

    搜索热词 对PHP在Apache中两种工作方式的区别(CGI模式.Apache 模块DLL)感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! Windows 下有两种方法使 ...

  4. Vue中可以外链HTML吗,vue-cli中,使用第三方CDN外链资源(js、css)

    双十一买了一台云服务器,正巧最近用vue写了一个生成随机密码的页面,于是部署在了该机器上. 机器的部署过程就略过,如果有人感兴趣,可以联系我,交流一下. 部署完成之后,打开页面,接近8秒的白屏时间,页 ...

  5. python的编程模式-python编程(python开发的三种运行模式)【转】

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 单循环模式 多线程模式 reactor模式 [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing ...

  6. 区块链在数据流通中的应用

    区块链在数据流通中的应用 闫树,卿苏德,魏凯 中国信息通信研究院,北京 100191 摘要:大数据的流通是创造数据价值的关键一环,然而目前数据流通面临着诸多问题.区块链是一种分布式账本技术,具有去中心 ...

  7. 正则表达式中的贪婪、勉强、侵占模式到底是什么意思?如何进行使用?

    正则表达式中的贪婪.勉强.侵占模式到底是什么意思?如何进行使用? 前言 正文 贪婪.勉强.侵占模式对比 通过实例分析贪婪.勉强.侵占 贪婪模式 勉强模式 侵占模式 小结 前言 不管是什么语言,基本都会 ...

  8. 区块链测试(一):测试人员初学区块链

    区块链可能会成为未来10年互联应用的一个底层技术,会应用于各行各业的各种项目.比如:商品溯源,既然区块链会易用到各种系统,QA同学当然有必要了解下区块链该怎么测了. 1.1区块链的出现和特点 区块链的 ...

  9. else 策略模式去掉if_设计模式(三)——简单的状态模式代替if-else

    博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长. 前言 大多数开发人员现在还在使用if else的过 ...

最新文章

  1. bzoj 2179 FFT快速傅立叶
  2. C# Linq to SQL — Group by
  3. postman怎么不登陆使用_最新百度云不限速,免安装、免登陆、不限速,打开网站就能使用...
  4. 测试攻城狮必备技能点!一文带你解读DevOps下的测试技术
  5. python第三方库引用_Python入门:如何使用第三方库
  6. 请描述定时器初值的计算方式_51单片机定时器初值计算器
  7. docker 查看容器名_如何查看Docker容器环境变量,如何向容器传递环境变量
  8. 快速地将SolidWorks模型导入Adams
  9. 台式计算机硬盘主要接口,硬盘接口类型,详细教您怎么看硬盘接口的类型
  10. AXI_lite 总线学习
  11. android底部滑动出现虚拟按键,Android适配底部虚拟按键的方法详解
  12. 智能手机与个人计算机有什么区别,请问智能手机与非智能手机的区别!
  13. 基于Java+控制台实现车辆信息管理系统
  14. 前端VUE3+Vite -- 框架搭建
  15. 网站服务器怎么做防御?遇到攻击如何解决?
  16. 基于ZigBee+ESP32+MQTT+EMQX+TomCat+Servlet接口+MySQL+安卓app的物联网课设
  17. 打开系统setting页面
  18. Google Play ASO 系列 - 用户体验一直为王
  19. Anaconda下安装opencv
  20. 使用word2vec对新浪微博进行情感分析和分类

热门文章

  1. Linux——Shebang符号
  2. R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析、克朗巴哈系数、、每剔除某一条目后系数的变化、alphaBest函数获取最高alpha值对应的项目集
  3. 2014 年度回忆录
  4. VS Code配置python运行环境
  5. 通过JAVA编写一个简单的雇员管理系统小项目
  6. this.$router.push() 和 router-link在IE11下页面不跳转
  7. 图片光照不均修正处理
  8. 恶意软件防卫指南:你知道自己感染了恶意软件吗?
  9. eos源码赏析(六):EOS智能合约入门金叶子兑换碎银
  10. JavaScript组合模式是什么