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(); ?>
 

最新文章

  1. MongoDBDao 工具类(包含分页取数据)
  2. linux查看python安装路径,版本号
  3. linux c 多线程编程
  4. Spring中@Transactional事务回滚实例及源码
  5. Notes of the scrum meeting(2013/10/23)
  6. [转载]mysql慢日志文件分析处理
  7. 宿舍局域网与Internet连接
  8. html标签应用
  9. iOS NSDatePicker
  10. DUBBO安装配置注意事项
  11. quick-cocos2d-x endToLua 退出会卡住
  12. GUI自绘_其中左边树状菜单控件风格灵感来源于城市博物馆的壁灯效果。
  13. 基于 svn 服务器及 cocoapods-repo-svn 插件进行组件化私有库的创建
  14. 图标跟着摄像机(Camera)orthographicSize的值改变大小
  15. Django学习笔记(3)——表单,测试和模板语法的学习
  16. 洛谷P4841 城市规划(生成函数 多项式求逆)
  17. B - I Hate It HDU - 1754 线段树区间最大值板子(单点更新,区间最大)
  18. Future 示例
  19. 【GIS】Cesium回到初始位置
  20. 优云软件助阵ArchSummit全球架构师峰会

热门文章

  1. [Flex][Adobe Flash Builder 4.6]谷歌浏览器(Chrome)下运行Flex程序的问题
  2. Sqlserver 实际开发中表变量的用法
  3. uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 - 大总结
  4. Theme.AppCompat.Light.DarkActionBar ActionBarActivity
  5. 用Putty连接Linux
  6. containsKey使用方法
  7. 吐血整理:PyTorch项目代码与资源列表 | 资源下载
  8. 身份证归属地查询免费api接口代码
  9. Oracle exp使用正則表達式导出部分表
  10. Project Euler:Problem 41 Pandigital prime