首页 > 代码库 > 命令链模式
命令链模式
此模式有点类似 观察者模式 区别就是所有的观察者都进行参数检测.实际代码如下
[PHP] 纯文本查看 复制代码
?
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
命令链模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。