标签:接口 注册 pac imp cin 观察 source string help
此模式有点类似 观察者模式 区别就是所有的观察者都进行参数检测.实际代码如下
| 
 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
标签:接口 注册 pac imp cin 观察 source string help
原文地址:http://www.cnblogs.com/ghjbk/p/6670232.html