最近重构代码发现责任链模式非常实用,所以简单总结了一下。总体来说,责任链模式更像是一种简化多种场景下调用处理的一种设计模式,特别适合if-else分支判断很多的场景。比如是根据不同会员等级给予不同的优惠力度。

它的定义:对象的调用是由下家的应用连接起来的处理链。一直不断在链上传递,直到有某个对象可以处理为止。

我个人的理解:就像一个人要举报某个高官贪污,要先从当地法院进行提案举报,当地法院权限不足,然后将这个事儿继续上报给中级人民法院,中级人民法院发现无权处理,又把举报再上报给最高法,in the end 最高法依法受理。

它的好处:

1.解耦。使用单一职责的处理类去处理不同场景条件下的业务,达到解耦,方便后期扩展和维护。

2.客户端无感。请求方不用知道具体是哪个处理类完成了请求处理,将处理过程交给系统内部。

3.可扩展性。可以动态重新组织链式和分配责任,当有新的case的时候就增加一个节点处理类即可,不用改变调用过程。

具体例子如下:

<?php
/*** Created by PhpStorm.* User: tonny*/abstract class Handler {protected $higher = null;abstract public function operation($lev);
}
// 房间主人
class RoomMaster extends Handler {protected $higher = "admin";public function operation($lev){// TODO: Implement operation() method.if ($lev <= 1) {echo "房间主人搞定!";} else {$higher = $this->higher;$this->higher = new $higher();$this->higher->operation($lev);}}
}
// 管理员
class Admin extends Handler {protected $higher = "God";public function operation($lev){// TODO: Implement operation() method.if ($lev <= 50) {echo "Admin搞定";} else {echo "God搞定";}}
}$try = new RoomMaster();
$lev = rand(0, 100);$try->operation($lev);

总结:利用php的动态特性,将下一个节点的类保存在每个处理类中的$higher变量中,通过$lev来判断是当前处理类是否处理得过来,如果能处理则处理,不能处理则交给$higher。

转载于:https://www.cnblogs.com/freephp/p/11152065.html

php设计模式-责任链模式相关推荐

  1. Java设计模式-责任链模式

    Java设计模式-责任链模式,我想这是值得你了解一下下的啦. 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持 ...

  2. 设计模式--责任链模式--Java实现

    设计模式–责任链模式–Java实现 责任链模式–链式数据结构–内存消耗–Java的awt事件一开始用责任链模式后来改为观察者模式–为什么呢?–现在的应用–dom事件–异常处理机制-过滤器链–等等 学习 ...

  3. 理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式丨C++后端开发丨Linux服务器开发丨web服务器

    理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式 1. 开闭.单一职责.里氏替换.接口隔离等设计原则 2. 随处可见的模板方法 3. nginx中核心设计模式 责任链模式 4. 责 ...

  4. java责任链模式审批请假_Java设计模式-责任链模式

    Java设计模式-责任链模式 Java版本:jdk1.8 IDE:IDEA 一 前言 本文介绍责任链模式以及Java下的实现. 二 概念 1.什么是责任链模式 责任链模式(Chain of Respo ...

  5. 一起学设计模式 - 责任链模式

    责任链模式(ChainOfResponsibilityPattern)属于 行为型模式的一种,将请求沿着一条链传递,直到该链上的某个对象处理它为止. 概述 定义如下:一个请求有多个对象来处理,这些对象 ...

  6. 大话设计模式—责任链模式

    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为 ...

  7. 设计模式 责任链模式

    责任链模式 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计 ...

  8. 深入理解设计模式-责任链模式(职责链模式)

    文章目录 一.定义 二.使用场景 三.代码样例 1.需求 2.设计一个所有处理器都要实现的接口 3.实现各种处理器 4.客户端 5. 输出 四.要点与优缺点 结尾 一.定义 避免请求发送者与接收者耦合 ...

  9. 工作中常用的设计模式 -- 责任链模式

    一般做业务开发,不太容易有大量使用设计模式的场景.这里总结一下在业务开发中使用较为频繁的设计模式.当然语言为 Java,基于 Spring 框架. 1 责任链模式(Chain of Responsib ...

最新文章

  1. CF#212 Two Semiknights Meet
  2. 对话系统(四)- RNN
  3. AAAI 2021 | 关键词指导的神经对话模型
  4. 《开源成长策略——Talend 成功模式》邀请函
  5. mysql导入数据提前修改字段_Mysql一些导入导出数据库,添加修改字段命令_MySQL...
  6. nginx配置文件中参数的作用
  7. cnsl是什么意思_VS2010下创建静态链接库和动态链接库
  8. vnc远程无法关闭窗口_vnc远程画面不能控制,vnc远程画面控制不了是什么原因?原因详解...
  9. 重写equals()与hashCode()方法
  10. python没基础能自学吗-50K大牛告诉你,没有任何编程基础,到底应该怎么自学Python...
  11. Echo团队Alpha冲刺随笔 - 第六天
  12. 基于互信息的特征选择算法MATLAB实现
  13. AB PLC软件如何破解?
  14. 计算机笔记--【JVM】
  15. php后台管理员登录密码错误,织梦后台登陆不上提示验证码不正确1.密码明明正确的,却无法登陆后台管理...
  16. Mac屏幕截图快捷键
  17. JSON (JavaScript Object Notation)
  18. 30多个HTML5经典动画应用展示
  19. 深圳和信中欧金融科技研究院开业,着力打造金融科技高地项目
  20. OpenCV3实现橡皮擦功能[画板]

热门文章

  1. 美赛整理之偏微分方程的数值求解(一)
  2. android 任意剪切view,Android 任意View切圆角
  3. php获取两个字符,php获取两个字符串之间的子字符串
  4. 学习springBoot(8)RabbitMQ
  5. 使用java反射写一个通用的jdbc查询
  6. 锁-概念:可重入锁、可中断锁、公平锁、读写锁
  7. 部门WIFI配置-防火墙-核心交换机和POE交换机
  8. 深入研究java.lang.Class类
  9. Makefile变量
  10. bash脚本:case语句