此模式有点类似 观察者模式 区别就是所有的观察者都进行参数检测.实际代码如下
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
<?php/** * 注册的注册器功能 */class Register { public $mObList = [];//观察者列表 /** * 注册方法 */ public function registerObj($obj) { $this->mObList[] = $obj; } /** * 执行通知 */ public function send($cmd) { foreach ($this->mObList as $obj) { echo get_class($obj) , /*获取类名*/ $obj->onCmd($cmd) ? ‘支持‘ : ‘不支持‘ ,/*三元计算,逗号运算级别最低,对结果不会有影响*/ $cmd , ‘<hr />‘; } } } /** * 命令链接口 */interface ICmd{ public function onCmd($cmd);}/** * 用户类 支持的命令有 adduser deluser edituser */class UserCmd implements ICmd{public function onCmd($cmd) { if(in_array($cmd, [‘adduser‘, ‘deluser‘, ‘edituser‘])) { echo ‘<hr>执行了!<hr>‘; return true; } else { return false; } }}/** * 新闻类,支持命令addnews delnews editnews */class NewsCmd implements ICmd{ public function onCmd($cmd) { if(in_array($cmd, [‘addnews‘, ‘delnews‘, ‘editnews‘])) { echo ‘<hr>执行了!<hr>‘; return true; } else { return false; } }}//实际的演示代码$register = new Register();//实例化//注册2个类$register->registerObj(new UserCmd());$register->registerObj(new NewsCmd());//执行命令$register->send(‘adduser‘);$register->send(‘editnews‘);?> |
结果如下
UserCmd
执行了!
支持adduser
NewsCmd不支持adduser
UserCmd不支持editnews
NewsCmd
执行了!
支持editnews
原文:http://www.cnblogs.com/ghjbk/p/6670232.html