php设计模式课程---5、责任链模式是什么

一、总结

一句话总结:

自己权限不够,就交给上级处理

1、选择结构怎么做到面向对象开闭原则?

也就是说if,都可以用接口的实现来实现,这样就避免了更新的时候修改原来代码,这就是抽象工厂。

2、责任链模式怎么实现?

就是一条链,链上的人权限逐级变大,事情被最低权限的人发现,如果权限够处理,就处理,不够就交给上一级
代码实现的话就是有个基类,然后每种权限的人继承这个基类就可以了,实现里面的方法

3、php中如何从类的属性值变到方法?

属性加了圆括号变成了方法:$this->toper = new $this->top();//属性加了圆括号变成了方法(属性值->值->方法),比如$this->top可以是Police

4、从选择结构的责任链模式到继承类的责任链模式经历了什么?

选择模式的多种情况选择变成了类的逐级判断

5、责任链模式中,最开始发现事情的是哪一级?

总是最低级

6、责任链模式中,每个人的属性有哪些?

权限值
上级(对象名)

二、责任链模式是什么

1、相关知识

 

2、代码

 <?php
class Admin {
public function __construct() {
if($this->top === null) {
return;
}
$this->toper = new $this->top();//属性加了圆括号变成了方法(属性值->值->方法)
} public function proc($danger) {
if($danger <= $this->power) { //如果权限能解决,就解决,这里也不会出现大权限解决小问题,因为我们是从最低级的版主一层层往上走的
$this->doProc();
} else {
$this->toper->proc($danger);
}
}
} class Banzhu extends Admin {
protected $power = 1;
protected $top = 'Police'; protected function doProc() {
echo '删帖';
}
} class Police extends Admin {
protected $power = 2;
protected $top = 'Guoan'; public function doProc() {
echo '抓人';
}
} class Guoan extends Admin {
protected $power = 3;
protected $top = null; public function doProc() {
echo '灭口';
}
} $danger = 3; $admin = new Banzhu(); //不合适的帖子肯定是版主最先发现,所以这里是new的版主
$admin->proc($danger); print_r($admin);

带选择结构的责任链

 <?php
/**
布尔教育: http://www.itbool.com
课后论坛: http://www.zixue.it
**/ /*
// 讲坛,举报
....
....
[举报] : 粗口 黄赌毒 反政府
: 版主 警察 国安
*/ class Banzhu {
protected $power = 1;
public function proc() {
echo '删帖';
}
} class Police {
protected $power = 2;
public function proc() {
echo '抓人';
}
} class Guoan{
protected $power = 3;
public function proc() {
echo '灭口';
}
} $jb = $_POST['jubao'] = 2; if($jb == 1) {
$admin = new Banzhu();
} else if($jb = 2) {
$admin = new Police();
} else if($jb = 3) {
$admin = new Guoan();
} $admin->proc(); ?>
 

php设计模式课程---5、责任链模式是什么的更多相关文章

  1. Python使用设计模式中的责任链模式与迭代器模式的示例

    Python使用设计模式中的责任链模式与迭代器模式的示例 这篇文章主要介绍了Python使用设计模式中的责任链模式与迭代器模式的示例,责任链模式与迭代器模式都可以被看作为行为型的设计模式,需要的朋友可 ...

  2. Java设计模式学习记录-责任链模式

    前言 已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式). 责任链模式 概念介绍 责任链模式是为了避免 ...

  3. 《java设计模式》之责任链模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...

  4. 重学 Java 设计模式:实战责任链模式「模拟618电商大促期间,项目上线流程多级负责人审批场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 场地和场景的重要性 射击

  5. [设计模式] javascript 之 责任链模式

    责任链模式:定义 责任链接模式又称职责链模式,是一种对象的行为模式:它是一种链式结构,每个节点都有可能两种操作,要么处理该请求停止该请求操作,要么把请求转发到下一个节点,让下一个节点来处理请求:该模式 ...

  6. Java设计模式系列之责任链模式

    责任链模式 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道 ...

  7. 设计模式学习之责任链模式(Chain of Responsibility,行为型模式)(22)

    参考:http://www.cnblogs.com/zhili/p/ChainOfResponsibity.html 一.引言 在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1 ...

  8. Java描述设计模式(15):责任链模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景描述 1.请假审批流程 公司常见的请假审批流程:请假天数 当 day<=3 天,项目经理审批 当 3<day<= ...

  9. Java设计模式13:责任链模式

    前言 来菜鸟这个大家庭10个月了,总得来说比较融入了环境,同时在忙碌的工作中也深感技术积累不够,在优秀的人身边工作必须更加花时间去提升自己的技术能力.技术视野,所以开一个系列文章,标题就轻松一点叫做最 ...

  10. 《JAVA设计模式》之责任链模式(Chain of Responsibility)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...

随机推荐

  1. 微信小程序 - 单个题目

    后端传过来的数据,如果通过wx:for遍历出来那就是一个页面全部排下来.... 我的想法就是,页面初始化时设置一个默认值 1/50 就是 index+1 / 50(后端传过来的数组长度),通过控制in ...

  2. UNP学习笔记(第十八章 路由套接字)

    路由套接字上支持3种类型的操作 1). 进程能通过写路由套接字向内核发消息. 2). 进程能通过路由套接字从内核读消息. 3). 进程可以用sysctl函数得到路由表或列出所有已配置的接口. 数据链路 ...

  3. 【Python】matplotlib绘制折线图

    一.绘制简单的折线图 import matplotlib.pyplot as plt squares=[1,4,9,16,25] plt.plot(squares) plt.show() 我们首先导入 ...

  4. js函数的Json写法

    https://zhidao.baidu.com/question/83401454.html

  5. Gson把对象转成json格式的字符串

    近期在做一个java web service项目,须要用到jason,本人对java不是特别精通,于是開始搜索一些java平台的json类库. 发现了google的gson.由于之前对于protoco ...

  6. Window下安装Gradle并在IDEA中配置

    真是作死啊,Maven都只是用得半瓢水,还来搞Gradle,小心撩得一身骚啊. 下载Gradle 下载页面为:https://gradle.org/releases/ Gradle 4.1的下载地址: ...

  7. HDFS源码分析EditLog之获取编辑日志输入流

    在<HDFS源码分析之EditLogTailer>一文中,我们详细了解了编辑日志跟踪器EditLogTailer的实现,介绍了其内部编辑日志追踪线程EditLogTailerThread的 ...

  8. javaScript 深层复制

    在工作中遇到了深浅复制的问题,所以详细总结一下: 深复制和浅复制只针对像 Object, Array 这样的复杂对象的.简单来说,浅复制只复制一层对象的属性,而深复制则递归复制了所有层级. var o ...

  9. 字符串查找strpos()函数用法

    #如果id=3 在字符串中查找出3是否存在.$str="2,12,33,22,55"; if(strpos(','.$id.',',','.$str.',')!==FALSE){ ...

  10. testVC.modalPresentationStyle = UIModalPresentationFormSheet; 更改 VC大小

    本文转载至 http://www.cocoachina.com/bbs/simple/?t31199.html TestViewController *testVC = [[TestViewContr ...