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

    <?php
    
    interface ICommand
    {
        public function onCommand( $name );
    }
    //为各个针对不同情况的函数,尽量用相同的处理函数
    
    class CommandChain//主类
    {
        private $_commands = array();//用来保存各种情况所对应的类的对象
    
        public function addCommand( $cmd )//增加不同的“处理器”
        {
            $this->_commands []= $cmd;
        }
    
        public function runCommand( $name )//主类中的处理函数
        {
            foreach( $this->_commands as $cmd )//将数组中存放的“处理器”依次调用,判断“处理器”中的方法是否相匹配,如果匹配,直接返回,不再往下执行
            {
                if ($cmd->onCommand( $name )) {
                    return;
                }
            }
        }
    }
    
    class UserCommand implements ICommand//第一个处理器,判断用户名中是否含有adduser
    {
        public function onCommand( $name )
        {
            if ($name != 'addUser' ) {
                return false;
            }
            echo "UserCommand handling 'addUser'
    ";
            return true;
        }
    }
    
    class MailCommand implements ICommand//第二个“处理器”。用来判断name中是否有mail
    {
        public function onCommand( $name )
        {
            if ($name != 'mail') {
                return false;
            }
            echo "MailCommand handling 'mail'
    ";
            return true;
        }
    }
    
    $cc = new CommandChain();//定义一个主类对象
    $cc->addCommand( new MailCommand() );//添加处理器
    $cc->addCommand( new UserCommand() );//添加处理器
    $cc->runCommand( 'addUser' );//输入参数adduser来处理
    $cc->runCommand( 'mail' );
    ?>
    

      这和之前的策略模式都很像,将几个“处理器”定义为类,都有相同的一个方法。

    1.写出几个策略类,有相同的方法(用接口实现)

    2.主类有一个数组用于保存插入的不同的策略函数的对象

    3.主类中用循环取出不同的策略对象,调用对象的处理方法,返回true,程序就停止运行

  • 相关阅读:
    mysql函数基本使用
    django form 组件源码解析
    jwt
    python数据类型 ——bytes 和 bytearray
    汇编基础四 --函数调用与堆栈平衡
    汇编基础之三 -- 汇编指令
    汇编基础之二 -- 寄存器和内存堆栈
    汇编基础之一 -- 位运算和四则运算的实现
    存储过程中的设置语句含义
    (转载)SQL去除回车符,换行符,空格和水平制表符
  • 原文地址:https://www.cnblogs.com/tobemaster/p/5767116.html
Copyright © 2011-2022 走看看