美文网首页
命令模式

命令模式

作者: 散装咖啡 | 来源:发表于2017-05-29 12:30 被阅读8次
/*
    command模式
     将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化,对
    请求排除或记录请求日志,以及支持可取消的操作
*/
    interface Command
    {
        public function execute();
    }
    
    class Invoker
    {
        private $_command = array();
        
        public function setCommand($command)
        {
            $this->_command[] =$command;
        }
        
        public function executeCommand()
        {
            foreach ($this->_command as $command) {
                $command->execute();
            }
        }
        
        public function removeCommand($command)
        {
            $key = array_search($command,$this->_command);
            if ($key !== false) {
                unset($this->_command[$key]);
            }
        }
    }
    
    class Receiver
    {
        private $_name = null;
        public function __construct($name)
        {
            $this->_name =$name;
        }
        
        public function action()
        {
            echo $this->_name . " action<br/>";
        }
        
        public function action1()
        {
            echo $this->_name . " action1<br/>";
        }
    }
    
    class ConcreteCommand implements Command
    {
        private $_receiver;
        public function __construct($receiver)
        {
            $this->_receiver = $receiver;
        }
        
        public function execute()
        {
            $this->_receiver->action();
        }
    }
    
    class ConcreteCommand1 implements Command
    {
        private $_receiver;
        public function __construct($receiver)
        {
            $this->_receiver =$receiver;
        }
        
        public function execute()
        {
            $this->_receiver->action1();
        }
    }
    
    class ConcreteCommand2 implements Command
    {
        private $_receiver;
        
        public function __construct($receiver)
        {
            $this->_receiver =$receiver;
        }
        
        public function execute()
        {
            $this->_receiver->action();
            $this->_receiver->action1();
        }
    }
    
    $objRecevier  = new Receiver("No.1");
    $objRecevier1 = new Receiver("No.2");
    $objRecevier2 = new Receiver("No.3");
    
    $objCommand   = new ConcreteCommand($objRecevier); //action
    $objCommand1  = new ConcreteCommand1($objRecevier); //action1
    
    $objCommand2  = new ConcreteCommand($objRecevier1); //action
    $objCommand3  = new ConcreteCommand1($objRecevier1); //action1
    
    $objCommand4  = new ConcreteCommand2($objRecevier2); // 使用 Recevier 的两个方法

    $objInvoker = new Invoker();
    
    $objInvoker->setCommand($objCommand);
    $objInvoker->setCommand($objCommand1);
    $objInvoker->executeCommand();
    
    $objInvoker->removeCommand($objCommand1);
    $objInvoker->executeCommand();
    
    $objInvoker->setCommand($objCommand2);
    $objInvoker->setCommand($objCommand3);
    $objInvoker->setCommand($objCommand4);
    $objInvoker->executeCommand();

参考文章 https://wenku.baidu.com/view/b4c78b4702768e9951e738fb.html

相关文章

  • 12.vim的使用技巧

    命令模式 、命令行模式、编辑模式: INSERT 首次进入文件: 命令模式输入: 表示 命令行模式出现...

  • 五、Linux vim编辑器

    vim编辑器三种模式:命令模式、编辑模式、末行模式 1.命令模式: vim进入文件后就是命令模式 1.1 命令模式...

  • 终端操作文件

    VIM 模式切换从命令模式->编辑模式:i,a,o,I,A,O从编辑模式->命令模式:ESC从命令模式->末行模式...

  • vim 操作 && Mac 配置本地Apache

    一、vim 的基本命令操作 vim 的模式: 编辑模式 ,命令模式 编辑模式: 命令模式:可以通过命令 最重要的命...

  • Vim高效编辑器

    Vim程序员高效编辑器 命令模式,输入模式,底线命令模式 默认进入vim就是命令模式,输入i变为输入模式 命令模式...

  • Command模式

    命令模式(Command) 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Tran...

  • 设计模式详解——命令模式

    本篇文章介绍一种设计模式——命令模式。本篇文章内容参考《JAVA与模式》之命令模式。 一、命令模式的概念 命令模式...

  • Vi编辑器

    命令模式 文本输入模式 末行模式。 插入模式 移动光标: 删除命令: 撤销命令: 重复命令 文本行移动: 复制粘贴...

  • JavaScript设计模式七(命令模式)

    JavaScript设计模式七(命令模式) 定义: 命令模式是最简单和优雅的模式之一,命令模式中的命令指的是一个执...

  • Cisco 路由器配置命令大全(二)

    (1)模式转换命令 用户模式----特权模式,使用命令"enable"特权模式----全局配置模式,使用命令"co...

网友评论

      本文标题:命令模式

      本文链接:https://www.haomeiwen.com/subject/dbvkfxtx.html