php设计模式课程---5、责任链模式是什么
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、责任链模式是什么的更多相关文章
- Python使用设计模式中的责任链模式与迭代器模式的示例
Python使用设计模式中的责任链模式与迭代器模式的示例 这篇文章主要介绍了Python使用设计模式中的责任链模式与迭代器模式的示例,责任链模式与迭代器模式都可以被看作为行为型的设计模式,需要的朋友可 ...
- Java设计模式学习记录-责任链模式
前言 已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式). 责任链模式 概念介绍 责任链模式是为了避免 ...
- 《java设计模式》之责任链模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...
- 重学 Java 设计模式:实战责任链模式「模拟618电商大促期间,项目上线流程多级负责人审批场景」
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 场地和场景的重要性 射击
- [设计模式] javascript 之 责任链模式
责任链模式:定义 责任链接模式又称职责链模式,是一种对象的行为模式:它是一种链式结构,每个节点都有可能两种操作,要么处理该请求停止该请求操作,要么把请求转发到下一个节点,让下一个节点来处理请求:该模式 ...
- Java设计模式系列之责任链模式
责任链模式 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道 ...
- 设计模式学习之责任链模式(Chain of Responsibility,行为型模式)(22)
参考:http://www.cnblogs.com/zhili/p/ChainOfResponsibity.html 一.引言 在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1 ...
- Java描述设计模式(15):责任链模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景描述 1.请假审批流程 公司常见的请假审批流程:请假天数 当 day<=3 天,项目经理审批 当 3<day<= ...
- Java设计模式13:责任链模式
前言 来菜鸟这个大家庭10个月了,总得来说比较融入了环境,同时在忙碌的工作中也深感技术积累不够,在优秀的人身边工作必须更加花时间去提升自己的技术能力.技术视野,所以开一个系列文章,标题就轻松一点叫做最 ...
- 《JAVA设计模式》之责任链模式(Chain of Responsibility)
在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...
随机推荐
- mysql rpm安装,以及修改charset
http://my.oschina.net/u/1156660/blog/343154?fromerr=tmDGGiDL 修改charset: http://stackoverflow.com/que ...
- VirtualBox 笔记
VirtualBox 笔记p=111" target="_blank"> http://www.youi5.com/?p=111 VirtualBox 虚拟机,由I ...
- 【Python】写入文件
1.1写入空文件 若将文本写入文件,在调用open()时候需要提供另外一个实参,告诉Python你要写入打开的文件 file_path = 'txt\MyFavoriteFruit.txt' with ...
- iphone手机分辨率--持久维护
6.5英寸 —— 1242 x 2688 px —— Xs Max 6.1英寸 —— 828 x 1792 px —— XR 5.8英寸 —— 1125 x 2436 px —— X/Xs 5.5英寸 ...
- css 使表格随着内容自动适应宽度
所谓难而不会,会儿不难.这个问题让我纠结了很长时间,一句css解决了,仅仅靠一个属性 td { white-space: nowrap; }
- Lua学习六----------Lua流程控制
© 版权声明:本文为博主原创文章,转载请注明出处 Lua流程控制 - 通过程序设定一个或多个条件语句 - 在条件为true时执行指定程序代码,在条件为false时指定其他指定程序代码 - 控制结构语句 ...
- Mysql 5.7.18 利用 MySQL proxies_priv(模拟角色)实现类似用户组管理
利用 MySQL proxies_priv(模拟角色)实现类似用户组管理 角色(Role)可以用来批量管理用户,同一个角色下的用户,拥有相同的权限. MySQL5.7.X以后可以模拟角色(Role)的 ...
- 简单理解ThreadLocal原理和适用场景
https://blog.csdn.net/qq_36632687/article/details/79551828?utm_source=blogkpcl2 参考文章: 正确理解ThreadLoca ...
- 利用GROUP_CONCAT函数把相同信息的合并到同一个字段中
SELECT a.*,GROUP_CONCAT(b.pri_name) FROM sh_role a LEFT JOIN sh_privilege b ON FIND_IN_SET(b.id,a.pr ...
- delphi Base64编码/解码及数据压缩/解压知识
一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...