zoukankan      html  css  js  c++  java
  • 命令链模式

    此模式有点类似 观察者模式 区别就是所有的观察者都进行参数检测.实际代码如下

    [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

  • 相关阅读:
    20145209预备作业01
    GDB调试汇编堆栈过程分析
    20145209 《信息安全系统设计基础》第14周学习总结
    20145209 《信息安全系统设计基础》第13周学习总结
    20145209 《信息安全系统设计基础》第13周学习总结
    2018-2019-2 20175320实验一《Java开发环境的熟悉》实验报告
    20175320 2018-2019-2 《Java程序设计》第5周学习总结
    20175320 2018-2019-2 《Java程序设计》第4周学习总结
    记2017问鼎杯预赛的wp---来自一个小菜鸡的感想
    利用python多线程实现多个客户端与单个服务端的远程ssh
  • 原文地址:https://www.cnblogs.com/ghjbk/p/6670232.html
Copyright © 2011-2022 走看看