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

时间:2022-10-02 18:05:18

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

一、总结

一句话总结:自己权限不够,就交给上级处理

 

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

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

 

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

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

 

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

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

 

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

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

 

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

总是最低级

 

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

权限值
上级(对象名)

 

 

 

 

二、责任链模式是什么

1、相关知识

 

 

2、代码

 1 <?php
 2 class Admin {
 3     public function __construct() {
 4         if($this->top === null) {
 5             return;
 6         }
 7         $this->toper = new $this->top();//属性加了圆括号变成了方法(属性值->值->方法)
 8     }
 9 
10     public function proc($danger) {
11         if($danger <= $this->power) { //如果权限能解决,就解决,这里也不会出现大权限解决小问题,因为我们是从最低级的版主一层层往上走的
12             $this->doProc();
13         } else {
14             $this->toper->proc($danger);
15         }
16     }
17 }
18 
19 class Banzhu extends Admin {
20     protected $power = 1;
21     protected $top = 'Police';
22 
23 
24     protected function doProc() {
25             echo '删帖';
26     }
27 }
28 
29 class Police extends Admin {
30     protected $power = 2;
31     protected $top = 'Guoan';
32 
33     public function doProc() {
34         echo '抓人';
35     }
36 }
37 
38 class Guoan extends Admin {
39     protected $power = 3;
40     protected $top = null;
41 
42     public function doProc() {
43         echo '灭口';
44     }
45 }
46 
47 
48 
49 $danger = 3;
50 
51 $admin = new Banzhu(); //不合适的帖子肯定是版主最先发现,所以这里是new的版主
52 $admin->proc($danger);
53 
54 print_r($admin);

 

带选择结构的责任链

php设计模式课程---5、责任链模式是什么php设计模式课程---5、责任链模式是什么
 1 <?php 
 2 /**
 3 布尔教育: http://www.itbool.com
 4 课后论坛: http://www.zixue.it
 5 **/
 6 
 7 /*
 8 // 讲坛,举报
 9 ....
10 ....
11 [举报] : 粗口 黄赌毒 反*
12        : 版主 警察   国安 
13 */
14 
15 class Banzhu {
16     protected $power = 1;
17     public function proc() {
18         echo '删帖';
19     }
20 }
21 
22 class Police {
23     protected $power = 2;
24     public function proc() {
25         echo '抓人';
26     }
27 }
28 
29 class Guoan{
30     protected $power = 3;
31     public function proc() {
32         echo '灭口';
33     }
34 }
35 
36 
37 $jb = $_POST['jubao']  = 2;
38 
39 if($jb == 1) {
40     $admin = new Banzhu();
41 } else if($jb = 2) {
42     $admin = new Police();
43 } else if($jb = 3) {
44     $admin = new Guoan();
45 }
46 
47 $admin->proc();
48 
49 
50 ?>
View Code