- <?php
- /**
- * 命令模式
- *
- * 将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化,对请求排除或记录请求日志,以及支持可取消的操作
- */
- 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);
- $objCommand1 = new ConcreteCommand1($objRecevier);
- $objCommand2 = new ConcreteCommand($objRecevier1);
- $objCommand3 = new ConcreteCommand1($objRecevier1);
- $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();
相关文章
- CocoaPod出现-bash: pod: command not found 解决办法
- [原创] ubuntu下安装scrapy报错 error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
- Cisco IOS basic system management command reference
- Cisco IOS Security command Guide
- ftp报错 200 port command successful. consider using pasv 425 failed to establish connection
- To Use FTP Command in Linux
- How to ping and test for a specific port from Linux or Unix command line
- React Native 开发环境安装和配置使用报错: -bash: react-native: command not found
- 在不使用Ctrl / Command键的情况下在JList中选择多个项目
- [Tool] SourceTree初始化GitFlow遇到错误(git command not found)的解决方案