责任链模式 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 :"市委解决";
?>
其实很简单,就是在当前类中定义好自己的上级名字,遇到自己解决不了的问题,就直接实例化调用上级,让它来处理。图示:
该文章属于《编程中的那些经典套路——设计模式汇总》系列
责任链模式 php,编程中的那些套路——关于责任链模式相关推荐
- python编程模式_Python编程中的反模式
原标题:Python编程中的反模式 这篇文章收集了我在Python新手开发者写的代码中所见到的不规范但偶尔又很微妙的问题. 本文的目的是为了帮助那些新手开发者渡过写出丑陋的Python代码的阶段. 对 ...
- mave工程中的一个类调用另一个聚合工程的一个类_谈谈设计模式:建造者模式在jdk中的体现,它和工厂模式区别?...
背景 建造模式(Builder模式) 假如有一个需求:盖房子,盖房子过程是一致的:打桩.砌墙.封顶.但是房子是各式各样的,最后盖出来的房子可能是高楼或别墅. 根据直接的思路,不用设计模式思想,我们也许 ...
- apache php 工作模式,PHP Apache中两种工作方式区别(CGI模式、Apache 模块DLL)
搜索热词 对PHP在Apache中两种工作方式的区别(CGI模式.Apache 模块DLL)感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! Windows 下有两种方法使 ...
- Vue中可以外链HTML吗,vue-cli中,使用第三方CDN外链资源(js、css)
双十一买了一台云服务器,正巧最近用vue写了一个生成随机密码的页面,于是部署在了该机器上. 机器的部署过程就略过,如果有人感兴趣,可以联系我,交流一下. 部署完成之后,打开页面,接近8秒的白屏时间,页 ...
- python的编程模式-python编程(python开发的三种运行模式)【转】
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 单循环模式 多线程模式 reactor模式 [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing ...
- 区块链在数据流通中的应用
区块链在数据流通中的应用 闫树,卿苏德,魏凯 中国信息通信研究院,北京 100191 摘要:大数据的流通是创造数据价值的关键一环,然而目前数据流通面临着诸多问题.区块链是一种分布式账本技术,具有去中心 ...
- 正则表达式中的贪婪、勉强、侵占模式到底是什么意思?如何进行使用?
正则表达式中的贪婪.勉强.侵占模式到底是什么意思?如何进行使用? 前言 正文 贪婪.勉强.侵占模式对比 通过实例分析贪婪.勉强.侵占 贪婪模式 勉强模式 侵占模式 小结 前言 不管是什么语言,基本都会 ...
- 区块链测试(一):测试人员初学区块链
区块链可能会成为未来10年互联应用的一个底层技术,会应用于各行各业的各种项目.比如:商品溯源,既然区块链会易用到各种系统,QA同学当然有必要了解下区块链该怎么测了. 1.1区块链的出现和特点 区块链的 ...
- else 策略模式去掉if_设计模式(三)——简单的状态模式代替if-else
博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长. 前言 大多数开发人员现在还在使用if else的过 ...
最新文章
- bzoj 2179 FFT快速傅立叶
- C# Linq to SQL — Group by
- postman怎么不登陆使用_最新百度云不限速,免安装、免登陆、不限速,打开网站就能使用...
- 测试攻城狮必备技能点!一文带你解读DevOps下的测试技术
- python第三方库引用_Python入门:如何使用第三方库
- 请描述定时器初值的计算方式_51单片机定时器初值计算器
- docker 查看容器名_如何查看Docker容器环境变量,如何向容器传递环境变量
- 快速地将SolidWorks模型导入Adams
- 台式计算机硬盘主要接口,硬盘接口类型,详细教您怎么看硬盘接口的类型
- AXI_lite 总线学习
- android底部滑动出现虚拟按键,Android适配底部虚拟按键的方法详解
- 智能手机与个人计算机有什么区别,请问智能手机与非智能手机的区别!
- 基于Java+控制台实现车辆信息管理系统
- 前端VUE3+Vite -- 框架搭建
- 网站服务器怎么做防御?遇到攻击如何解决?
- 基于ZigBee+ESP32+MQTT+EMQX+TomCat+Servlet接口+MySQL+安卓app的物联网课设
- 打开系统setting页面
- Google Play ASO 系列 - 用户体验一直为王
- Anaconda下安装opencv
- 使用word2vec对新浪微博进行情感分析和分类
热门文章
- Linux——Shebang符号
- R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析、克朗巴哈系数、、每剔除某一条目后系数的变化、alphaBest函数获取最高alpha值对应的项目集
- 2014 年度回忆录
- VS Code配置python运行环境
- 通过JAVA编写一个简单的雇员管理系统小项目
- this.$router.push() 和 router-link在IE11下页面不跳转
- 图片光照不均修正处理
- 恶意软件防卫指南:你知道自己感染了恶意软件吗?
- eos源码赏析(六):EOS智能合约入门金叶子兑换碎银
- JavaScript组合模式是什么