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. Linux ps 命令查看进程启动及运行时间

    引言 同事问我怎样看一个进程的启动时间和运行时间,我第一反应当然是说用 ps 命令啦.ps aux或ps -ef不就可以看时间吗? ps aux选项及输出说明 我们来重新复习下ps aux的选项,这是 ...

  2. 鼠标点击input框后里面的内容就消失

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. Robot framework 引入 Selenium2Library 类库:

    在用robotframework-selenium2library做web自动化测试时候,首先要将Selenium2Library导入到Test Suite中,在导入Selenium2Library时 ...

  4. springboot 项目中控制台打印日志以及每天生成日志文件

    1.控制台打印sql语句 只要在application.properties 中加入<configuration  scan="true" scanPeriod=" ...

  5. vim与sublime

    vim与sublime 对程序员来说,写代码是再熟悉不过的事情了,windows系统自带有记事本软件,能写写小规模的代码,可是代码量大了,它的局限性就暴露得很明显了:没有语法高亮,没有自动提示,不支持 ...

  6. python 安装protobuf

    安装准备:python和protoc(编译proto到各个语言) 下载protobuf源代码(各种语言实现):https://github.com/google/protobuf  1.到Python ...

  7. go web的简单服务器

    1)简单web服务器: package main import ( "fmt" "net/http" ) func sayHelloName(w http.Re ...

  8. 如何在IntelliJ IDEA在线查看源码的API文档

    https://blog.csdn.net/IFollowRivers/article/details/81604463

  9. 04 redis list结构及命令详解

    一:link 链表结构 lpush key value 作用: 把值插入到链接头部[右边] 注意:rpush key value 插入到左边 rpop key 作用: 返回并删除链表尾元素 rpush ...

  10. Cannot create __weak reference in file using manual reference counting

    Xcode更新到7.3后会出现NSObject+MJProperty.h报Cannot create __weak reference in file using manual reference c ...